如何在std :: map中对部分键进行二进制搜索?

kha*_*vah 1 c++ containers dictionary binary-search c++11

我有一张数据图;关键是std::string。我想对它执行二进制搜索,但是我不能只使用std::map::find(),因为我将只提供一部分密钥。

假设我有一张带有以下按键的地图:

["abc"] -> ...
["efg"] -> ...
["ijk"] -> ...
["iik"] -> ...
Run Code Online (Sandbox Code Playgroud)

我想使用进行搜索,比如说仅提供"i",搜索应该返回:

[“ ijk”]-> ...,[“ iik”]-> ...

这可能吗?我尝试使用迭代器来执行此操作,但由于无法将它们视为索引而失败了。

注意:由于其他原因,我将数据保留在地图中,所以我不想将其更改为其他数据结构。

lcc*_*sco 5

有可能,但是您实际上不需要对数据进行二进制搜索。

您可以使用Lower_bound查找第一个元素,然后前进结果迭代器,直到您的密钥不再符合您的条件,然后将它们存储在一个<vector>或类似的容器中以返回所有内容。

  • 虽然通常使用红黑(二进制)树来实现“ std :: map”,但我不明白为什么“ map”必须是“二进制”树。 (2认同)