我正在尝试根据xValue
对此进行排序:
Item
side: L
xValue:2
label: 0
yValue: 50
Item
side: R
xValue:10
label: 0
yValue: 50
Item
side: L
xValue:35
label: 1
yValue: 20
Item
side: R
xValue:55
label: 1
yValue: 20
Item
side: L
xValue:30
label: 2
yValue: 60
Item
side: R
xValue:45
label: 2
yValue: 60
在Item.cpp
中,我重载了运算符<
:
bool Item::operator < (const Item& itm) const{
return (xValue < itm.xValue);
}
这就是我使用std::sort
的方式:
sort(mainList.begin(), mainList.end());
但结果是:
Item
side: L
xValue:2
label: 0
yValue: 50
Item
side: L
xValue:35
label: 1
yValue: 20
Item
side: R
xValue:10
label: 0
yValue: 50
Item
side: R
xValue:55
label: 1
yValue: 20
Item
side: L
xValue:30
label: 2
yValue: 60
Item
side: R
xValue:45
label: 2
yValue: 60
这里有什么问题?
编辑:主列表:
vector<Item*> mainList;
mainList插入:
if (myfile.is_open()){
// read building count
getline(myfile,line);
buildingCount = atoi(split(line)[0].c_str());
// read buildings
for (int b=0; b < buildingCount; b++){
getline(myfile,line);
mainList.push_back(new Item('L', atoi(split(line)[0].c_str()), b, atoi(split(line)[1].c_str())));
mainList.push_back(new Item('R', atoi(split(line)[2].c_str()), b, atoi(split(line)[1].c_str())));
}
}
答案 0 :(得分:5)
您需要一个仿函数进行比较,并将其作为第三个参数进行排序:
http://www.cplusplus.com/forum/general/59164/
struct Compare {
bool operator() (const Item* left, const Item* right) const {
return left->xValue < right->xValue;
}
}
sort(mainList.begin(), mainList.end(), Compare());
答案 1 :(得分:2)
std::sort
函数可以正确排序,但它只会按照您的要求进行排序。
它对mainList
中的元素进行排序。最常见的两个错误是:
mainList
,但打印的是mainList
。mainList
不是Item
的容器,而是Item*
或std::shared_ptr<Item>
的其他类型,则会发生这种情况。这些只是猜测,但如果没有完整的问题示例,我们除了提供非常一般的答案之外,我们做的不仅仅是。
答案 2 :(得分:0)
因为我使用了任何内置的排序,但是我觉得你的比较器可能与你想要的不同。
尝试告诉sort使用大于
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
// sort using a standard library compare function object
std::sort(s.begin(), s.end(), std::greater<int>());