我将我的unordered_map设置为:
unordered_map<int, deque<my_struct>> table;
当我读取我的程序的值时,我通常会这样做:
table[int].push_back(obj);
我想要做的是,如果给出2个整数变量,我希望能够找到两者之间出现的键数。
因此,如果在我的表中我有像
这样的代码 table[49].push_back(obj);
table[59].push_back(obj);
table[60].push_back(obj);
如果我执行我的搜索功能(我正在尝试编写)来查看45和65之间的键值,我应该得到3个结果。
我不确定如何以有效的方式解决这个问题。任何想法都会有所帮助。比你。
答案 0 :(得分:1)
如果您使用的是std::unordered_map
,我认为您可以选择循环使用45到65之间的所有整数,并使用find
检查unordered_map
中是否存在密钥1}}:
using my_table = std::unordered_map<int, std::deque<my_struct>>;
int count(const my_table& table, int begin, int end) {
int sum = 0;
for (int i = begin; i != end; ++i) {
auto find_result = table.find(i);
if (find_result != table.end())
sum++;
}
return sum;
}
但这可能效率不高。如果您使用std::map
而不是订购元素,那么可以更有效地实现这一目标:
using my_table = std::map<int, std::deque<my_struct>>;
int count(const my_table& table, int begin, int end) {
auto begin_itr = table.lower_bound(begin);
if (begin_itr == table.end())
return 0;
auto end_itr = table.lower_bound(end);
return std::distance(begin_itr, end_itr);
}
我已使用std::map::lower_bound
功能。
根据地图的稀疏程度,您甚至可以考虑使用std::vector<std::deque<my_struct>>
等平面地图。