如何在多图键的字符串中找到子字符串?例如,如果我输入“Louis”,那么是否找到了Louisville,Louisberg和StLouis?
最佳答案
对于您要执行的操作,您将必须在每个键中进行搜索,而不仅是前缀或后缀。我认为这没有任何办法,也无法优化,因为搜索词可以出现在键内的任何位置。
您可以使用std::find_if
并提供谓词函数以匹配元素并迭代 map 。我在下面的代码中使用std::map
,但这也可以适用于std::multimap
。
#include <map>
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::map<std::string, std::string> myMap{
{"Louis", "AA"}, {"Louisville", "BBB"}, {"Louisberg", "A"},
{"StLouis ", "C"}, {"Huntsville", "D"} };
std::string term("Louis");
auto keyContains = [&term](const std::pair<std::string, std::string>& item)
{
return item.first.find(term) != std::string::npos;
};
auto iter = std::find_if(myMap.begin(), myMap.end(), keyContains);
while (iter != myMap.end())
{
std::cout << iter->first << std::endl;
iter = std::find_if(std::next(iter), myMap.end(), keyContains);
}
}
keyContains
是lambda函数。如果您不熟悉lambda函数,则可以使用仿函数:struct keyContains
{
keyContains(const std::string& searchTerm) : mSearchTerm(searchTerm) {}
bool operator() (const std::pair<std::string, string>& item) const
{
return item.first.find(mSearchTerm) != std::string::npos;
}
std::string mSearchTerm;
};
然后像这样初始化它:
keyContains comp("Louis")
并传递comp
作为谓词。希望这对您有帮助吗?它实际上是遍历 map 的for循环。工作版本here。
更新:
我刚刚读了您的评论,您说您的搜索应返回 54049 结果。有很多记录!为此,最好将其与前缀或后缀匹配。您可以使用
std::map::lower_bound()
和std::map::upper_bound()
。
关于c++ - 如何在 multimap 的字符串中查找子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59923324/