检查向量中的所有结构是否相等

时间:2016-04-15 18:30:37

标签: c++ vector struct

我有一个struct label_diff的载体。

label_diff包含“string”和整数。

我想检查label_diff的向量是否包含基于每个元素的“字符串”的相等元素

in .h

struct label_diff {
    string label;
    int diff;

    label_diff(string l = " ", int i = 0)
    {
        label = l;
        diff = i;
    }
};

在main中:

int main()
{
    vector<label_diff> KNN;
    label_diff temp;
    temp.label= "Red";
    temp.diff= 25689;

    label_diff temp2;
    temp2.label= "Red";
    temp2.diff= 444;

    label_diff temp3;
    temp3.label= "Red";
    temp3.diff= 0;

    // check if all elements have same label
    if() {cout>>"Same Label"}
    return 0;
}

我知道我可以使用for循环来循环元素以了解标签名称,但有没有办法使用内置函数std :: equal()?

1 个答案:

答案 0 :(得分:1)

如果您使用的是C ++ 11,则可以使用all_of中的<algorithm>和lambda来执行此操作:

if( std::all_of(
        KNN.begin(),
        KNN.end(),
        [&](label_diff l){return l.label == KNN.begin()->label;} ) )
{
    cout << "Same Label"
}

仅供参考,你是<<进入cout,而不是>>。您还没有将标签放在矢量中。这是一个有效的更正版本(您可能希望将其更改为实际使用,例如删除using namespace std;):

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

struct label_diff
{
    string label;
    int diff;

    label_diff(string l = " ", int i = 0)
    {
        label = l;
        diff = i;
    }
};

int main()
{
    vector<label_diff> KNN(3);
    KNN[0].label= "Red";
    KNN[0].diff= 25689;

    KNN[1].label= "Red";
    KNN[1].diff= 444;

    KNN[2].label= "Red";
    KNN[2].diff= 0;

    // check if all elements have same label
    if( std::all_of(
            KNN.begin(),
            KNN.end(),
            [&](label_diff l){return l.label == KNN.begin()->label;} ) )
    {
        cout << "Same Label";
    }

    return 0;
}