[英]C++ - match and replace element by value in custom data type vector
我有一個向量,其中包含不同組的數據。 如果我將一個組的新數據插入向量中,則應使用相同組號的新數據替換舊數據。 對於此特定示例, std::replace
給出錯誤std::replace': no matching overloaded function found
#include <iostream>
#include <vector>
#include <algorithm>
class data
{
public:
int group;
bool condition;
int time;
friend bool operator==(const data& lhs, const data& rhs);
data(int g, bool c, int t)
{
group = g;
condition = c;
time = t;
}
};
bool operator==(const data& lhs, const data& rhs)
{
return lhs.group == rhs.group;
}
int main(int argc, char**)
{
data info_1(10, true , 1);
data info_2(20, true, 1);
data info_3(10, false, 4);
std::vector<data> data_vector;
data_vector.push_back(info_1);
data_vector.push_back(info_2);
std::replace(data_vector.begin(), data_vector.end(), data_vector ,info_3);
std::cout << "vector size: " << data_vector.size() << "\n";
for (int i = 0; i < data_vector.size(); i++)
{
std::cout << "group number: " << data_vector[i].group << std::boolalpha << " condition: " << data_vector[i].condition << "\n";
}
system("pause");
return 0;
}
根據https://en.cppreference.com/w/cpp/algorithm/replace,std::replace std::replace()
的第三個參數是const T& old_value
。 您正在傳遞整個向量。 這就是為什么no matching overloaded function found
的原因。
您應該使用std::map
,其中組是鍵,其余數據是值。
這樣,當您將新項目插入地圖時,除非該項目的組號已經存在,然后將其替換現有項目,否則它將被添加。
class data
{
public:
bool condition;
int time;
friend bool operator==(const data& lhs, const data& rhs);
data(bool c, int t)
{
condition = c;
time = t;
}
};
然后使用std::map<int, Data>
作為容器。
您還可以實現一個包裝類,該包裝類將std::map<int, Data>
作為私有成員,實現插入和迭代(可能還包括刪除等),然后可以在其外部使用ExtendedData
或其他任何東西,這是最初在實施Data
時實施。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.