我有一对矢量.该对中的第一个类型为std :: string,第二个类型为Container.
在std或boost中存在什么方便的功能,以便我可以返回一个给定字符串值的容器作为键?
UPDATE
有人评论说,我可以使用std :: map,但实际上我需要按照我把它们推送到向量的顺序来保存我的项目的顺序.
解决方法
一个可能的解决方案:
struct comp { comp(std::string const& s) : _s(s) { } bool operator () (std::pair<std::string,Container> const& p) { return (p.first == _s); } std::string _s; }; // ... typedef std::vector<std::pair<std::string,Container> > my_vector; my_vector v; // ... my_vector::iterator i = std::find_if(v.begin(),v.end(),comp("World")); if (i != v.end()) { Container& c = i->second; } // ...
这是一个完整的例子:
#include <vector> #include <utility> #include <string> #include <algorithm> struct Container { Container(int c) : _c(c) { } int _c; }; struct comp { comp(std::string const& s) : _s(s) { } bool operator () (std::pair<std::string,Container> const& p) { return (p.first == _s); } std::string _s; }; #include <iostream> int main() { typedef std::vector<std::pair<std::string,Container> > my_vector; my_vector v; v.push_back(std::make_pair("Hello",Container(42))); v.push_back(std::make_pair("World",Container(1729))); my_vector::iterator i = std::find_if(v.begin(),comp("World")); if (i != v.end()) { Container& c = i->second; std::cout << c._c; // <== Prints 1729 } }
这里是live example.