我有一个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()?
答案 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;
}