我工作的服务器性能非常重要。
我需要映射一个字符串到字符串的关系,让我们称之为客户名称到客户地址。 程序需要首先检查客户名称是否是“黑名单”列表的一部分。 如果他是黑名单的一部分,那么他只能向其中一个白名单地址下订单。
规则:
起初,我认为保留std::multimap
if(mymap.find(customer) != my.end())
上面的内容应该是相当快的。 当我需要检查订单是否来自白名单地址时,问题就来了。 使用multimap时,我必须使用相等的范围:
// Whitelisted addresses of blacklisted customers
auto it = mymap.equal_range(customer);
for (auto itr = it.first; itr != it.second; ++itr)
{
if(address == itr->second)
// Allow to order to be places
}
有没有办法避免这种循环? 我能想到的唯一其他方法是保留两个std::unordered_set(s)。 一个保存客户名称,另一个保存由客户名称,分隔符和白名单地址组成的字符串。 例如。 对于住在伦敦的客户John,我将把“John”存储在第一个unordered_set中,并将“JohnLondon”存储在第二个unordered_set中。 使两个查找的时间复杂度保持不变。
第二个选项的问题是数据重复的数量。 内存管理也是这个服务器的一个问题。
这就是我要找的:
std::unordered_map<; std::string,std::unordered_set