c++ - 通过一对 key 搜索 multimap

标签 c++ stl iterator multimap

我有一个具有结构的 multimap

multimap< pair<int,int>, bool >

我插入了数据,它看起来像这样

I is [0] Int is [5] Bool is [0]
I is [0] Int is [100] Bool is [0]
I is [0] Int is [100] Bool is [0]
I is [1] Int is [100] Bool is [0]
I is [1] Int is [100] Bool is [0]
I is [1] Int is [100] Bool is [0]
I is [2] Int is [5] Bool is [0]
I is [2] Int is [100] Bool is [0]
I is [2] Int is [100] Bool is [0]

我需要能够让 map 的迭代器跳转到下一个 I 而无需遍历其他 I

例如,我只想添加不具有相同I 值的Ints。所以它可以去

add 5 + 100 + 5

因为这些将是第一个具有不同I's 的值。我该怎么做呢?

最佳答案

好吧 - 你可以使用 map lower_bound功能 - 您需要向其应用“下一个”主键 - 请参阅:

auto next_key(int key_first)
{
    return std::make_pair(key_first + 1, std::numeric_limits<int>::min());
}

所以下一个要搜索的 key 对是(first + 1, INT_MIN)

所以,循环:

for (auto i = data.begin(); 
          i != data.end(); 
          i = data.lower_bound(next_key(i->first.first)))
{
    std::cout << i->first.second << std::endl;
}

对于此数据:

std::multimap< std::pair<int,int>, bool > data = {
    {{0,5},false},
    {{0,100},false},
    {{0,100},false},
    {{1,100},false},
    {{1,100},false},
    {{1,100},false},
    {{2,5},false},
    {{2,100},false},
    {{2,100},false}
};

你得到:

5
100
5

关于c++ - 通过一对 key 搜索 multimap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33637278/

相关文章:

c++ - 在 Rcpp 函数中替换 Rcpp::List 的元素是内存安全的吗?

c++ - Qt GUI事件记录和回放

c++ - 在 C++ 中,使用 operator<< 构造函数的输入

c - C 中 ADT 列表迭代器的问题

c++ - 为什么 std::begin() 和 std::end() 适用于固定数组,而不适用于动态数组?

loops - 展开向量中的(开始,结束)对

c++ - zGuide for zeroMQ 编译失败

c++ - 关于c++中 vector 的地址

c++ - 并行填充 vector ,顺序不重要

c++ - 带 nfs 挂载的 QFileSystemWatcher