【发布时间】:2014-07-27 03:42:06
【问题描述】:
我正在尝试从map 创建一个排序的vector,根据不是地图键的值进行排序。
映射值为block对象,我希望向量按照size,block的属性进行排序。
我的代码:
#include <map>
#include <string>
#include <vector>
struct block {
string data;
int size;
};
struct vecotrCompare {
bool operator()(pair<const string, block*> &left,
pair<const string, block*> &right) {
return left.second -> size < right.second -> size;
}
};
int main() {
map<const string, block*> myMap;
vector<pair<const string, block*> > myVector(
myMap.begin(), myMap.end());
sort(myVector.begin(), myVector.end(), vecotrCompare());
}
sort(...) 行无法编译,并且出现编译错误:
error: no match for call to ‘(vecotrCompare) (std::pair<const
std::basic_string<char>, block*>&, const std::pair<const
std::basic_string<char>, block*>&)’
【问题讨论】:
-
required from here只是错误的一部分,也是最没用的部分。 -
总是发布完整的错误
-
无论如何,向量中不能有不可复制的对象(比如一对
const的东西)。它在地图中是多余的,除此之外将无法使用。 -
我更新了问题,谢谢
-
干得好!通过从
vecotrCompare::operator()的参数中删除const&,您已经完全改变了错误以及您看到它的原因。重新添加const&,您将遇到下一个错误,我在回答中已对此进行了解释。