如何在没有临时设置的s1中存储设置差异s1-s2?

 hashico_983 发布于 2023-02-08 11:09

STL是否已经包含任何简单的方法或算法来存储集合之间的差异set1set2直接存在set1,而不需要临时的集合变量?

下面的示例代码显示了我已经尝试过的一些替代方案(哪些方法无效)以及带有临时设置的解决方案tmp(我想避免):

int _tmain(int argc, _TCHAR* argv[])
{
    std::set set1, set2;

    set1.insert(1); set1.insert(2); set1.insert(3); set1.insert(4); set1.insert(5);
    set2.insert(4); set2.insert(6);

    // NONE OF THE FOLLOWING ALTERNATIVES DID WORK:
    // a: // set1.erase(set2.end(), set2.begin());
    // b: // std::set_difference(set1.begin(), set1.end(), 
    //                set2.begin(), set2.end(), set1.begin());
    // c: // std::remove_if(set1.begin(), set1.end(), 
    //                [set2](int i){return set2.find(i) != set2.end();} );

    // Complicated version, for which I am trying to find something simpler:
    std::set tmp;
    std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(tmp, tmp.end()));
    set1.clear();
    std::copy(tmp.begin(), tmp.end(), std::inserter(set1, set1.end()));

    // Print result: // Expect 1 2 3 5
    std::cout << "set1: ";
    for (auto it=set1.begin(); it != set1.end(); it++)
    {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

我在寻找,它的解决方案并不需要C++ 11(除了少数获准在Visual Studio 2010中C++ 11层结构).

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有