【发布时间】:2018-05-15 10:38:36
【问题描述】:
我将尝试通过以下示例来解释我的问题:
vector<pair<string, string>> a = { { "A","1" }, {"B","2" },{ "C","3" },{ "D","3" },{ "E","5" } };
vector<pair<string, string>> b = { { "A","1" },{ "B","3" },{ "D","3" },{ "E","4" },{ "Z","5" } };
消除重复并将输出放入相同向量的最有效方法是什么?对的数量非常大,假设大约 100 000。
两个向量都按第一个元素排序。
vector<pair<string, string>> a = { { "B","2" },{ "C","3" },{ "E","5" } };
vector<pair<string, string>> b = { { "B","3" },{ "E","4" },{ "Z","5" } };
问题是,我需要在删除重复项后比较这个向量。
该对中的第一个元素是文件路径,第二个元素是它的校验和。
例如,如果我在第一个容器中有"B","2",而"B","3" 是第二个容器,我可以将此文件列为“已修改”。我愿意使用std::set,如果这会让这个问题变得更容易。
【问题讨论】:
-
当你说重复时,你的意思是两个容器中存在相同的对吗?你需要one of the standard algorithms吗?
-
在速度、内存、编码时间方面“高效”?
-
@LightnessRacesinOrbit 是的,我的意思是两个容器中存在相同的对,但我宁愿不创建新向量。我将需要这两个向量来进一步比较它们。高效 - 速度和内存
-
如果您正在寻找容器中排序和唯一的元素,那么为什么不 Set 呢?将向量转换为 C++11 风格的集合很容易: std::set
> s(std::make_move_iterator(a.begin()), std::make_move_iterator(a.end() )); -
获得最佳时间和最佳空间的东西通常是困难的。算法是关于权衡取舍的,通常是在这两件事之间。我相信这个操作的标准算法需要一个不同的目标容器;您也许可以想出一些可以就地工作的东西,但几乎可以肯定它会更慢。
标签: c++ algorithm vector duplicates std-pair