c++ - 我如何仅使用 Binder 在 map 中找到值

标签 c++ stl

搜索 map 的第二个值时,我使用如下内容:

typedef std::map<int, int> CMyList;
static CMyList myList;

template<class t> struct second_equal
{
    typename typedef t::mapped_type mapped_type;
    typename typedef t::value_type value_type;

    second_equal(mapped_type f) : v(f)   {};
    bool operator()(const value_type &a) { return a.second == v;};

    mapped_type v;
};
...    
int i = 7;
CMyList::iterator it = std::find_if(myList.begin(), myList.end(), 
                                    second_equal<CMyList>(i));

问题:如何在不提供自写模板的情况下在一行中完成这样的查找?

最佳答案

使用选择器从您从 map 获得的 value_type 中选择第一个或第二个元素。 使用联编程序将值 (i) 绑定(bind)到 std::equal_to 函数的参数之一。 使用 Composer 将选择器的输出用作 equal_to 函数的另一个参数。

//stl version
CMyList::iterator it = std::find_if(
    myList.begin(), 
    myList.end(), 
    std::compose1(
        std::bind2nd(equal_to<CMyList::mapped_type>(), i), 
        std::select2nd<CMyList::value_type>())) ;

//Boost.Lambda or Boost.Bind version
CMyList::iterator it = std::find_if(
    myList.begin(), 
    myList.end(), 
    bind( &CMyList::mapped_type::second, _1)==i);

关于c++ - 我如何仅使用 Binder 在 map 中找到值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728847/

相关文章:

c++ - 在不更改源文件的情况下重建exe时如何自动链接新的静态库?

c++ - 从它在共享对象中的位置创建一个类对象

c++ - 内存泄漏测试

c++ - 平衡二叉树编码

c++ - 在结构 vector 的结构 vector 的映射中存储数据

c++ - std::priority_queue 中的比较器

c++ - 没有匹配函数来调用 Std::find?

c++ - 如何将一个函数绑定(bind)到另一个函数

c++ - 将指针分配给迭代器

c++ - 如何测试是否定义了只能通过#define 宏访问的标识符?