c++ - map 复杂查找操作

标签 c++ stl boost map find

我想做以下事情:
定义字符串和任何类型的对象(可以是列表、整数 - 任何对象)之间的映射。
map 的键可以如下所示(值同样不重要):
"AAA/123"==> 1
"AAA/"==> 2
"BBB/
"==> 3
"CCC/*"==> 4
"CCC/123"==> 5
现在,诀窍是我想在给定以下字符串的情况下找到正确的值:
"AAA/123"应该给 1。
“AAA/111”应该给 2。
“CCC/111”应该给4。
“CCC/123”应该给5。
“BBB/AAA/123”应该给 3。

知道我如何使用 C++ 和可能的 STL/boost 做到这一点吗?

最佳答案

这是 litb 答案的一个变体(不知何故从答案列表中删除了),如果删除了“*”,它可能会起作用:

template<typename Map> typename Map::const_iterator
find_prefix(Map const& map, typename Map::key_type const& key)
{
    typename Map::const_iterator it = map.upper_bound(key);
    while (it != map.begin())
    {
        --it;
        if(key.substr(0, it->first.size()) == it->first)
            return it;
    }

    return map.end(); // map contains no prefix
}

我忘了添加使用它的代码:

std::map<std::string, int> smap;
smap["AAA/"] = 1;
smap["BBB/"] = 2;
smap["AAA/AA"] = 3;

find_prefix(smap, "AAA/AB")->second; // ==> 1
find_prefix(smap, "AAA/AA")->second; // ==> 3
find_prefix(smap, "BBB/AB")->second; // ==> 2
find_prefix(smap, "CCC/AB"); // ==> smap.end()

任何评论(并感谢 litb)?

关于c++ - map 复杂查找操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/556838/

相关文章:

c++ - Boost 的链接器选项

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - 如何测试一个集合是否自反、对称、反对称和/或传递?

c++ unordered_map 如果预先知道最大大小,是否有办法为元素预分配内存

c++ - C++ 中的 vector 问题

c++ - Boost.Test 崩溃并出现 ***Exception : Other on MSVC

c++ - 使用 OpenCV Cuda ORB 特征检测器

c++ - k 旋转移位数组并找到 x?

c++ - 这段代码是如何工作的? (多集排序)

c++ - boost::xpressive 查看序列的开头