如何创建元组C++列表

Jim*_*Jim 8 c++ boost tuples list

我对c ++很新,我真的没有任何背景知识.我想要创建一个元组列表,第一个将是一个int,第二个将是一个字符串.

  #include <string>
  #include <list>
  #include <boost/tuple/tuple.hpp>
  ....
  list< tuple<int,string> > time;
Run Code Online (Sandbox Code Playgroud)

并得到一个错误.我希望能够创建一个列表,添加我可以按int排序的条目,并具有描述int的字符串.

我该如何创建此列表?

Pet*_*McG 12

对于简单的列表使用std::vector而不是std::list.

你可能只想要一些简单的东西,例如:

#include <iostream>
#include <vector>
#include <string>
#include "boost/tuple/tuple.hpp"

using namespace std;
using boost::tuple;

typedef vector< tuple<int,string> > tuple_list;

int main(int arg, char* argv[]) {
    tuple_list tl;
    tl.push_back( tuple<int, string>(21,"Jim") );

    for (tuple_list::const_iterator i = tl.begin(); i != tl.end(); ++i) {
        cout << "Age: " << i->get<0>() << endl;
        cout << "Name: " << i->get<1>() << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

std::list 实际上是您可能不需要的双向链表的实现.


are*_*lek 9

这里的答案有点过时,并没有告诉你如何对列表进行排序.

C++ 11开始,您可以使用标准tuple,vector例如:

#include <tuple>
#include <vector>
// ...
vector<tuple<int, string>> data;
Run Code Online (Sandbox Code Playgroud)

要添加条目,您可以使用emplace_back方法vector.这是从标准输入读取的示例:

#include <iostream>
// ...
int age;
string name;
while(cin >> age >> name) data.emplace_back(age, name);
Run Code Online (Sandbox Code Playgroud)

要进行排序,使用标准sort函数就足够了,因为int在我们的例子中,元组的第一个元素是,默认排序顺序将int首先按s 排序元素,然后按strings 排序:

#include <algorithm>
// ...
sort(data.begin(), data.end());
Run Code Online (Sandbox Code Playgroud)

您可以通过索引从元组中检索值:

get<0>(data[i])
Run Code Online (Sandbox Code Playgroud)

或按类型:

get<int>(data[i])
Run Code Online (Sandbox Code Playgroud)

我已经整理了一个完整的例子,你可以在ideone上看到.