【发布时间】:2018-07-12 11:40:24
【问题描述】:
我有一个包含不同组数据的向量。如果我将特定组的新数据插入向量中,它应该用相同组号的新数据替换旧数据。对于这个特定的例子,std::replace 给出了一个错误
std::replace: 找不到匹配的重载函数
#include <iostream>
#include <vector>
#include <algorithm>
class data
{
public:
int group;
bool condition;
friend bool operator==(const data& lhs, const data& rhs);
data(int g, bool c)
{
group = g;
condition = c;
}
};
bool operator==(const data& lhs, const data& rhs)
{
return lhs.group == rhs.group;
}
int main()
{
data info_1(1, true);
data info_2(2, true);
data info_3(3, false);
data info_4(4, false);
data info_5(3, false);
std::vector<data> data_vector;
data_vector.push_back(info_1);
data_vector.push_back(info_2);
data_vector.push_back(info_3);
data_vector.push_back(info_4);
if (std::find(data_vector.begin(), data_vector.end(), info_5) != data_vector.end())
{
std::cout << " Matched: \n";
std::replace(data_vector.begin(), data_vector.end(), data_vector, info_5);
}
else
{
std::cout << "Not Matched: \n";
}
system("pause");
return 0;
}
【问题讨论】:
-
也许
std::vector不是正确的容器类型?也许你应该使用例如std::unordered_set(具有合适的std::hash专业化)? -
@Someprogrammerdude,或者可能是 std::map ?有什么取舍吗?
-
std::replace- 第三个参数是一元谓词或比较值 (see here) 而不是std::vector对象。 -
或
std::unordered_map... 此处的地图(有序或无序)可能会更好,因为您可以将group作为键,将数据作为数据。跨度>