根据成员变量的条件将项添加到对象向量

时间:2017-11-22 00:56:18

标签: c++ vector

我有两个自定义对象向量定义如下

struct PrimitiveInfo
{
    std::list<int> symbolNumbers;
    //other attributes here....
};

我有这两个载体

std::vector<PrimitiveInfo> m_symbolPrimitiveList;
std::vector<PrimitiveInfo> m_newPrimitiveList;

这两个向量由Data的其他方法填充。

现在我要添加m_newPrimitiveList项目,这些项目与m_symbolPrimitiveList

中的符号数不同

对于Eg:如果一个新的primitivelist对象包含symbolNumbers为1,2,3我只需要将该对象添加到m_symbolPrimitiveList向量,只要它没有一个符号为{{1}的对象在他们的名单中。如果它有一个带有符号编号1,2,3的对象,我就不会将新对象添加到1,2,3

这可以通过for循环完成,但我想知道是否有更聪明的方法来实现这一目标?我没有使用C ++ 11

1 个答案:

答案 0 :(得分:0)

以下是我对你案件的建议。您可能希望根据需要更改此代码,尤其是检查数字列表的部分

struct MyStruct
{
    public:
    list<int> numbers;
    friend bool operator== (const MyStruct& p1, const MyStruct& p2);
};

bool operator== (const MyStruct& p1, const MyStruct& p2)
{
    // change as you want to check if objects are equal
    list<int> l1 = p1.numbers;
    list<int> l2 = p2.numbers;
    for (list<int>::const_iterator it1=l1.begin(); it1 != l1.end(); ++it1) {
        list<int>::iterator it2 = find(l2.begin(), l2.end(), *it1);
        if (it2 != p2.numbers.end()) {
            // at least one element is found, treat it as equal
            cout << "equal " << *it1 << endl;
            return true;
        }
    }
    cout << "not equal" << endl;
    return false;
}

bool checkInfo(MyStruct info, vector<MyStruct> v2)
{
    bool found = false;
    vector<MyStruct>::iterator it = find(v2.begin(), v2.end(), info);
    // true if info is found in v2
    return it != v2.end();
}

使用方法是:

vector<MyStruct> s1;
vector<MyStruct> s2;

list<int> l1;
l1.push_back(1);
l1.push_back(2);

MyStruct p1;
p1.numbers = l1;
s2.push_back(p1);
s2.push_back(p1);

for (int i =0; i < s2.size(); i++) {
    if (checkInfo(s2[i], s1)) {
        // found, do not add
        cout << "found. skipp adding" << endl;
    }
    else
    {
        cout << "not found, so need to add " << endl;
        s1.push_back(s2[i]);
    }
}