我正在尝试在带有前缀的地图中进行部分匹配。
我的keys
类似于:"ABCD efg,1234"
我的values
类似于:"qqwe,123123,asdad,2000,323232"
认为我传递的字符串与密钥匹配是"ABCD efg"
NOTE: the `map` deceleration is elsewhere. It is declered like the following:
std::unordered_map<std::string, std::string> umap;
Code:
std::unordered_map<std::string, std::string>::const_iterator Account::FindPrefix(const std::string& search_for)
{
std::unordered_map<std::string, std::string>::const_iterator got = umap.lower_bound(search_for);
if (got != umap.end())
{
const std::string& key = got->first;
if (key.compare(0, search_for.size(), search_for) == 0)
return got;
}
return umap.end();
}
代码已编译,但始终返回umap.end()
,并且从未返回got
,因此我使用了调试器,我注意到constant iterator got
的值为(<Error reading characters of string>,<Error reading characters of string>)
注意:我确实检查过以确保我正确地将值输入map
,似乎没问题,因为我可以看到它被填充。
注2:Kabanus建议在if语句之前输出got。当它达到std::cout<<got->first;
程序崩溃时,我得到以下按摩:
Exception thrown at 0x57EF65F6 (msvcp140d.dll) in BankManagment.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD.
答案 0 :(得分:0)
您想使用find
方法:http://www.cplusplus.com/reference/unordered_map/unordered_map/find/
如果它是std::map
,则下限将标记项目本身(如果已经存在)或者可以添加它的位置(“插入提示”)。它有利于高效的搜索或插入操作(您不需要再次遍历树)。你只是模仿find
已经做过的事情,在这里(也就是说,如果你再次std::map
)......