进一步这个问题:order a vector of points based on another vector,但这两个向量具有不同的类型。
我正在尝试根据std::string类型的另一个向量对具有struct Item类型的向量进行排序。为此,我使用了struct Item的一个元素(类型为std::string的ID),并将其与字符串向量进行比较。
struct myCompareStruct
{
std::vector<std::string> all;
std::vector<item> special;
myCompareStruct(const std::vector<std::string>& a, const std::vector<item>& s)
: all(a), special(s)
{
}
bool operator() (const std::string& i, const item& j)
{
return(i.compare(j.ID) == 0);
}
};
std::vector<std::string> all;
std::vector<item> special;
//fill your vectors
myCompareStruct compareObject(all,special);
std::sort(special.begin(), special.end(), compareObject);但这会给我一个编译时错误: error C2664:'bool myCompareStruct::operator ()(const item&,const std::string &)‘:无法将参数1从'item’转换为'const std::string &‘
item.ID的类型为std::string。
发布于 2013-10-20 13:42:21
您正在对item的std::vector<item>进行排序,但是您的谓词myCompareStruct::operator()不能比较两个item,它会比较std::string和item。您需要像这样编写一个运算符
bool operator() (const item& x, const item& y) {
return x.ID.compare(y.ID)
}以便在std::sort中使用它。或者,如果您的所有项目都可以转换为字符串,那么您可能希望定义一个从item到std::string的转换
item::operator std::string() const {return ID}发布于 2013-10-20 13:46:17
因为您没有显示您对i的定义,所以item
所以,你可能需要这个:
bool operator() (const std::item& i, const item& j)
{
size_t pos1 = std::find(special.begin(), special.end(),i) - special.begin() ;
size_t pos2 = std::find(special.begin(), special.end(),j) - special.begin() ;
return all[pos1] < all[pos2] ;
}重载项目的==
这可以根据all中元素的确切数量对special进行排序。如果情况并非如此,那么您将拥有一个XY problem
https://stackoverflow.com/questions/19474212
复制相似问题