从向量<t>

时间:2018-01-15 13:48:03

标签: c++ c++11 vector lambda set

我有一个CustomClass个对象的向量 - 它有一个名为name的字符串字段。如何在C ++中创建set这些名称?

如果我这样做:

std::vector<CustomClass> vec ;
// .... populate with data
std::set< std::string> myset( vec.begin(), vec.end() ) ;

编译器当然会抱怨,但是我如何“应用”一个函数,以便从矢量的每个元素中获取“vec.name”?

我正在使用C ++ 11。

3 个答案:

答案 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; });

LIVE

答案 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,通过该变量调用输入函数并给出值,并将类对象地址存储在向量中。 创建迭代器变量以访问存储值的值。 谢谢