c – 在std :: vector中找到

c – 在std :: vector中找到,第1张

概述我有一对矢量.该对中的第一个类型为std :: string,第二个类型为Container. 在std或boost中存在什么方便的功能,以便我可以返回一个给定字符串值的容器作为键? UPDATE 有人评论说,我可以使用std :: map,但实际上我需要按照我把它们推送到向量的顺序来保存我的项目的顺序. 一个可能的解决方案: struct comp{ comp(std::string 我有一对矢量.该对中的第一个类型为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.

总结

以上是内存溢出为你收集整理的c – 在std :: vector中找到全部内容,希望文章能够帮你解决c – 在std :: vector中找到所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存