代码之家  ›  专栏  ›  技术社区  ›  rubenvb

std::set及其前插迭代器

  •  1
  • rubenvb  · 技术社区  · 14 年前

    我知道我能做到:

    std::vector<double> vec;
    std::back_insert_iterator<std::vector<double> > it( back_inserter(vec) );
    it = 4.5;
    

    但是我想做一些类似的事情 语法 )到 std::set (并使用 front_insert_iterator 而不是对集合和使用的引用 set::insert ). 是可能的,还是我被迫使用集合的引用?也许我应该用 std::merge 和/或 std::set_intersect (这将允许在出现重复的情况下进行良好的错误报告)?这是个好办法吗?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  3
  •   John Dibling    14 年前

    你没有 push_back push_front set ,因为(概念上)一个 设置 是排序的关联容器。不过,你可以这样做:

    #include <cstdlib>
    #include <set>
    #include <iterator>
    using namespace std;
    
    int main()
    {
        typedef set<int> MySet;
        MySet si;
        insert_iterator<MySet> it(si, si.begin());
    
        *it = 1;
        *it = 2;
    
    }
    

    编辑:

    请注意 begin() 迭代器初始化为 元素的位置。相反,这是一个提示,STL从何处开始寻找放置项目的位置。

    编辑2:

    根据下面的注释,您还需要一种检查插入项的“处置”的方法。也就是说,一种在插入项目之前判断该项目是否已存在的方法。

    你不能直接用 只有 迭代器。如果你需要这些信息,你有两个选择。

    1) 不要使用插入迭代器。唯一的办法是 bool 你从 set::insert 就是打电话 集合::插入 . 所以打电话 集合::插入

    42)检查 设置 插入前后。如果大小增加了一个,则插入该项。:)我把它作为42号商品出售,因为在国际海事组织,它远不如打电话 insert 直接原因有很多。可能存在多线程问题,计算性能可能受到影响 size() 等等。

        2
  •  1
  •   Fred Larson    14 年前

    不能插入到 set . 也许你要找的是 std::inserter .

    http://stdcxx.apache.org/doc/stdlibref/insert-iterator.html

        3
  •  1
  •   chris    14 年前

    使用 front_insert_iterator 容器必须具有成员 push_front 定义(如标准容器 deque list ).