zoukankan      html  css  js  c++  java
  • 利用 set_symmetric_difference 求两个 vector 中不同的所有元素

    这个问题原本是 C++ 吧里有人问的, 我当时就立刻动手解决了, 结果后来才发现, STL 里已经有了对应的泛型算法了......

    看来我对 STL 知道的还是太少, 贴一下我当时完成的方法:

    set<int> VecToSet (const vector<int> &vec)
    {
        set<int> tmp_set (vec.cbegin (), vec.cend ());
        return move (tmp_set);
    }
    
    void EraseSameNum (set<int> &short_set
                     , set<int> &long_set)
    {
        for (auto it = short_set.begin ();
             it != short_set.end ();) {
            auto loc = long_set.find (*it);
            if (loc != long_set.end ()) {
                auto loc2 = it;
                ++it;
                short_set.erase (loc2);
                long_set.erase (loc);
            }
            ++it;
        }
    }
    set<int> GetDiffNums (const vector<int> &lhs_vec
                        , const vector<int> &rhs_vec)
    {
        set<int> lhs_set = VecToSet(lhs_vec);
        set<int> rhs_set = VecToSet(rhs_vec);
        if (lhs_set.size () > rhs_set.size ()) {
            EraseSameNum (rhs_set, lhs_set);
        }
        EraseSameNum (rhs_set, lhs_set);
        set<int> diff_set (lhs_set);
        diff_set.insert (rhs_set.begin(), rhs_set.end());
        return move (diff_set);
    }
    
    int main()
    {
        using int_v = vector<int>;
        int_v v1{1, 2, 4, 6};
        int_v v2{2, 5, 6, 8, 4};
        set<int> iset = GetDiffNums(v1, v2);  
    }

    刚码好的时候自我感觉还是不错的,直到看到了可以用 STL 的泛型算法解决:

    int main ()
    {
        using int_v = vector<int>;
        int_v vec1{1, 3, 6};
        int_v vec2{2, 3, 8, 3, 7, 6};
        sort (vec1.begin(), vec1.end());
        sort (vec2.begin(), vec2.end());
        set<int> iset;
        set_symmetric_difference (vec1.begin()
                                  , vec1.end()
                                  , vec2.begin()
                                  , vec2.end()
                                  , inserter(
                                    iset, iset.begin()));
        return 0;
    }
  • 相关阅读:
    局部变量的认识
    179一个错误的认识
    (jmeter笔记) websocket接口测试
    (jmeter笔记)聚合报告分析
    (jmeter笔记)模拟用户各种场景压测
    (linux笔记)开放防火墙端口
    (jmeter笔记)导出响应内容的网络文件
    (jmeter笔记)jmeter导出excel,中文显示乱码
    (jmeter笔记)jmeter监控服务器资源
    (Jmeter笔记)jmeter连接数据库(mysql)
  • 原文地址:https://www.cnblogs.com/wuOverflow/p/4264360.html
Copyright © 2011-2022 走看看