【发布时间】:2013-10-20 05:22:33
【问题描述】:
进一步回答这个问题: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&,const std::string &)' : 无法将参数 1 从 'item' 转换为 'const std::string &'
item.ID 是 std::string 类型。
【问题讨论】:
-
显然你的
bool operator() (const std::string& i, const item& j)的第一个论点是错误的。告诉i是什么? -
当
item.ID与向量all中的字符串具有相同的顺序时,您是否尝试以某种方式订购vector special?如果是这样,vector all所有当前存在的item.ID吗? -
vector all 只是一些字符串的向量。创建了一个子集,向量特殊,它是一个结构。更多结构信息添加到向量特殊。但我需要特殊向量基于与向量全部相同的顺序。为了比较它们,我使用了一个向量特殊元素 ID,即 std::string。
-
但是你没有回答。无论如何,如果我正确理解您的比较功能
bool operator() (const item& i, const item& j) { return std::find(all.begin(), all.end(), i.ID) < std::find(all.begin(), all.end(), j.ID); }