我有两个清单。一个类型的MyClass,并填充了我写的这些类。第二个有一些int值。
问题是我不知道如何使用第二个列表的值来处理第一个列表的排序。 我不知道如何编写IComparer来使用排序列表方法。我在msdn中看到了一个例子,但我不知道如何更改它。 http://msdn.microsoft.com/en-us/library/234b841s.aspx#Y535
这是我的计划:
// ##################################
ref class MyClass{
private:
int x;
int y;
String^ name;
public:
MyClass(int x, int y, String^ name){
this->x = x;
this->y = y;
this->name = name;
}
...
};
//###### in some button which will initialize...:
List<MyClass^>^ listMyClass = gcnew List<MyClass^>(3);
listMyClass->Add(gcnew MyClass(3, 5, "class1"));
listMyClass->Add(gcnew MyClass(1, 2, "class2"));
listMyClass->Add(gcnew MyClass(6, 8, "class3"));
List<int>^ numbers = gcnew List<int>(3);
numbers->Add(2);
numbers->Add(4);
numbers->Add(1);
// ###################################
这些数字List表示listMyClass元素的某种状态。所以我想使用列表编号的值对listMyClass进行排序。
排序后我想得到这样的结果:
listMyClass[1]
是第一个,因为列表编号中的数字4是最高的。然后
listMyClass[0]
然后listMyClass[2]
有没有可能处理这个挑战?
答案 0 :(得分:0)
如果在第二个列表中是唯一的int values
,您可以使用std::vector
将MyClass
插入由您存储在第二个列表中的int值指示的位置。如果没有,请使用std::multiset
作为密钥{/ 1}}。
答案 1 :(得分:0)
(不是特定于C ++ / CLI)
使用Dictionary<int, int>
代替第二个列表:
然后,您可以轻松实现自定义IComparer<T>.Compare(T x, T y)
,以便...
x.status
。Dictionary
的排序顺序
y.status
。Dictionary
的排序顺序
...然后将此比较器传递给List<T>.Sort(IComparer<T>)
作为第一个列表。
P.S。对于本机C ++解决方案,您可以使用与std::unordered_map<int, int>
类似的想法。
答案 2 :(得分:0)
我设法击败了这个挑战:) 这是解决方案
ref class MyClass:IComparable<MyClass^>{
public:
int x;
int y;
int status;
String^ name;
MyClass(int x, int y, String^ name){
this->x = x;
this->y = y;
this->name = name;
}
virtual int CompareTo(MyClass^ tmpMyClass){
if(this->status > tmpMyClass->status)
return 1;
if(this->status < tmpMyClass->status)
return -1;
else
return 0;
}
...
};
//###### in some button which will initialize...:
List<MyClass^>^ listMyClass = gcnew List<MyClass^>(3);
listMyClass->Add(gcnew MyClass(3, 5, "class1"));
listMyClass->Add(gcnew MyClass(1, 2, "class2"));
listMyClass->Add(gcnew MyClass(6, 8, "class3"));
List<int>^ numbers = gcnew List<int>(3);
numbers->Add(2);
numbers->Add(4);
numbers->Add(1);
for(int i=0; i<listMyClass->Count; i++){
listMyClass->status = numbers[i];
}
listMyClass->Sort();
我感到很放心:)感谢您的任何建议。