0

为了进一步解决这个问题:根据另一个向量订购一个点向量,但两个向量都有不同的类型。

我正在尝试基于另一个 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 &)' : cannot convert parameter 1 from 'item' to 'const std::string & '

item.ID 是 std::string 类型。

4

2 回答 2

1

您正在排序 a std::vector<item>ofitem但您的谓词myCompareStruct::operator()无法比较两个items,它比较 astd::string和 an item。你需要这样写一个运算符

bool operator() (const item& x, const item& y) {
    return x.ID.compare(y.ID)
}

为了在std::sort. 或者,如果您的所有项目都可以转换为字符串,您可能希望将转换 from itemto定义std::string为这样

item::operator std::string() const {return ID}
于 2013-10-20T05:42:21.410 回答
0

由于您没有显示您的定义iitem

所以,可能你需要这个:

 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 问题

于 2013-10-20T05:46:17.130 回答