代码之家  ›  专栏  ›  技术社区  ›  kbxu

3元素多重映射,按第一个数字排序,但计算第二个数字

  •  1
  • kbxu  · 技术社区  · 10 年前

    我正在使用 std::multimap 以这种方式

    std::multimap<float, std::pair<int, int> > edges;
    

    我想按第一个浮点数对其排序,但稍后再计算有多少 整数 (第一个 <int, int> )在这张多功能地图中。

    例如 我有元素对 (0.6001, <2,3>), (0.62, <2,4>), (0.63, <1,3>) 在我的 multimap , 我想数一下 <2,*> (这里应该是2)。

    有没有更简单的方法(比如 edges.count() )而不是把每一个元素都拿出来数数?

    或者还有其他的容器我可以求助吗?

    #

    解决方案1 我将首先将需要计数的值存储在 std::set 并计数为 jrok johny ;

    解决方案2 我会用 std::多映射 以再次存储第二和第三元素并计数。

    谢谢你们 jrok公司 约翰尼 !

    1 回复  |  直到 7 年前
        1
  •  1
  •   jrok    10 年前

    这个呢?

    std::multimap<float, std::pair<int, int> > edges;
    typedef std::multimap<float, std::pair<int, int> >::value_type ElemT;
    
    int value = 2;
    int count = 
    std::count_if(edges.begin(), edges.end(),
        [value](const ElemT& e) { return e.second.first == value; });