如何遍历两对STL集中的所有元素<pair <t1,t2>,pair <t1,t2>&gt;?

时间:2016-01-31 07:11:45

标签: c++ c++11 stl iterator auto

这是我正在使用的数据类型。

  set< std::pair<string,string>,std::pair<string,string>> foo;

这是我尝试循环的失败

for(auto &e: foo){
    cout << e.first << " " << e.second // this is where I am having an issue.
}

这种方式可以使用auto吗? 例如

e.first, e.second // some c++ magic (i realize -> is wrong)  In pseudo -> //  e.third ...

我很想使用auto,但如果不是,我将如何编写我正在使用的数据类型的迭代器?

1 个答案:

答案 0 :(得分:1)

你正在做一些非常奇怪的事情。

集合的签名是:

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class set;

所以你使用std::pair<std::string, std::string>作为比较器。一旦尝试插入内容,它就无法编译。

但我很确定这不是你想要的。

你可能想要

map<pair<string, string>, pair<string, string>>;

set<pair<pair<string, string>, pair<string<string>>>;

或者

set<tuple<string, string, string, string>>;