本人想写个二叉排序树的模板类,关键字的类型为class bitree<T>中的T,要比较大小需要怎么重载<,>,=运算符?
求大佬解答一下

解决方案 »

  1.   

    where T:IComparable
    只要实现了 IComparable 接口的类型都可使用(C#的基础类型基本都实现了 IComparable 接口)
    对于没有实现 IComparable 的自定义类型,你就实现一下就可以了
      

  2.   

            public static void BubbleSort<T>(T[] array, Comparison<T> comparison)  
            {  
                bool hasExchagend = false;  
                for (int i = 0; i < array.Length - 1; i++)  
                {  
                    for (int j = array.Length - 1; j > i; j--)  
                    {  
                        hasExchagend = false;  
                        if (comparison(array[j - 1], array[j]) > 0)  
                        {  
                            Exchange<T>(ref array[j], ref array[j - 1]);  
                            hasExchagend = true;  
                        }  
                    }  
      
                    if (!hasExchagend)  
                    {  
                        return;  
                    }  
      
                }  
      
            } 
    这是一个冒泡排序泛型版本的实现,你可以参考下。上面的代码使利用传入委托来实现的。
      

  3.   

    comparison委托应该怎么初始化呢?
      

  4.   

    你先用一种类型(比如 int)把代码调试好
    然后再考虑泛型
      

  5.   

    不用泛型是通的,用泛型编译器是这样的,我想问的是comparison应该初始化为什么
      

  6.   

    comparison 是你自定义的方法或委托,他需要什么,只有你自己才知道
      

  7.   

    #2 的 Comparison 是他自定义的类型,Comparison 中文释义:比较
    C# 预定义的是 IComparable 接口, Comparable 中文释义:可比较的
      

  8.   

    C#没有模板,C#的泛型和c++的模板有根本的不同。