gpt4 book ai didi

c++ - 赋值与 std::swap 以及合并和保留重复项在单独的对象中

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:15 25 4
gpt4 key购买 nike

假设我有两个 std::set<std::string>秒。第一个,old_options , 需要与其他选项合并,包含在 new_options 中.我不能只使用 std::merge (好吧,我这样做了,但不仅如此)因为我还检查 double 并相应地警告用户。为此,我有

void merge_options( set<string> &old_options, const set<string> &new_options )
{
// find duplicates and create merged_options, a stringset containing the merged options
// handle duplicated the way I want to
// ...
old_options = merged_options;
}
  1. 是不是比较好用

    std::swap( merged_options, old_options );

    或者我的任务是什么?

  2. 有没有更好的方法来过滤重复项并返回合并的 set比连续调用 std::set_intersectionstd::set_union检测欺骗并合并 set秒?我知道这比一次遍历和一次同时进行这两项遍历要慢,但是这些集合很小(性能并不重要)而且我对标准的信任胜过对自己的信任。

最佳答案

怎么了

void merge_options( set<string> &old_options, const set<string> &new_options )
{
for (set<string>::iterator i = new_options.begin();
i != new_options.end(); ++i)
if (old_options.find(*i) != old_options.end())
warn_duplicate(*i);
else
old_options.insert(*i);
}

这是一个简单的 O(m lg n) 算法,其中 m = new_options.size()n = old_options.size()

关于c++ - 赋值与 std::swap 以及合并和保留重复项在单独的对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com