【发布时间】:2015-03-24 15:36:26
【问题描述】:
我正在寻找一种非常快速的算法来返回存储在这样的集合中的对的值set<pair<string,string>>
更具体地说,我查找所有第二个值,其中第一个值以字符串开头。
示例: 我有一套这对:
<"asdf","qwer">,
<"asdfghj", "qwertyui">,
<"lkj","mno">
然后我用“asdf”调用我的方法,我想取回这些字符串的集合或向量:
"qwer"
"qwertyui"
谢谢!
【问题讨论】:
-
你能改变你原来的数据结构吗?这不是这项任务的最佳选择。
-
您将这些对存储在
std::set中的事实意味着它们已经按键排序。您可以使用std::set::lower_bound()来查找第一个具有按字典顺序大于或等于您的搜索键的键的元素,然后迭代直到该条件不再有效。一个更好的问题可能是是否有更好的数据结构可供使用。 -
实际上,数据集有多大?这对您解决问题的方式有很大的影响。
-
数据结构必须保持这样。这个集合中将有大约 500.000 个元素
-
一般来说没有“最快”的算法。对于特定的数据集,可能存在最快的算法,或者存在具有某些特征的算法。它们的行为方式取决于数据和您的要求(可用内存等)。