进一步提出这个问题: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);
但是这给了我一个编译时错误: 错误C2664:'bool myCompareStruct :: operator()(const item&amp;,const std :: string&amp;)':无法将参数1从'item'转换为'const std :: string&amp;'
item.ID的类型为std :: string。
答案 0 :(得分:1)
您正在对std::vector<item>
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}
答案 1 :(得分:0)
由于您没有显示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] ;
}
为项目
重载==
这可以根据special
中元素的确切数量对all
进行排序。如果不是这种情况,那么您将获得XY problem