如何遍历两对 STL set<pair<t1,t2>,pair<t1,t2>> 中的所有元素?
How can I loop through all the elements in a two pair STL set<pair<t1,t2>,pair<t1,t2>>?
这是我使用的数据类型。
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,但如果不是,我该如何为我正在使用的数据类型编写迭代器?
你正在做一些非常奇怪的事情。
集合的签名是:
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>>;
这是我使用的数据类型。
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,但如果不是,我该如何为我正在使用的数据类型编写迭代器?
你正在做一些非常奇怪的事情。
集合的签名是:
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>>;