我有一个CustomClass
个对象的向量 - 它有一个名为name
的字符串字段。如何在C ++中创建set
这些名称?
如果我这样做:
std::vector<CustomClass> vec ;
// .... populate with data
std::set< std::string> myset( vec.begin(), vec.end() ) ;
编译器当然会抱怨,但是我如何“应用”一个函数,以便从矢量的每个元素中获取“vec.name”?
我正在使用C ++ 11。
答案 0 :(得分:8)
您可以std::transform使用lambda(自C ++ 11起),例如
std::set<std::string> myset;
std::transform(vec.begin(),
vec.end(),
std::inserter(myset, myset.end()),
[](const CustomClass& cc) { return cc.name; });
答案 1 :(得分:3)
一个好的旧循环(基于版本c ++ 11范围)应该完成这项工作
for ( auto const & cc : vec )
myset.emplace(cc.name);
答案 2 :(得分:-1)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class demo
{
public:
string name;
void input()
{
cout<<"\n Enter the Name:";
cin>>name;
}
void output()
{
cout<<"\n Name is :"<<name;
}
};
int main()
{
vector <demo> d1(3);
demo *d2;
for(int i=0;i<3;i++)
{
d2=new demo;
d2->input();
d1.push_back(*d2);
}
vector<demo>::iterator j;
for( j=d1.begin();j!=d1.end();j++)
{
j->output();
}
return 0;
}
尝试以上编码,它将获取值并将其存储为包含类对象的向量。 向量d1(3) - &gt;为大小为3的类demo创建一个向量变量d1。创建另一个指针变量d2,通过该变量调用输入函数并给出值,并将类对象地址存储在向量中。 创建迭代器变量以访问存储值的值。 谢谢