簡體   English   中英

C ++-在自定義數據類型向量中按值匹配和替換元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM