共用方式為


set::insert

將項目或某個項目範圍插入集合中。

// (1) single element pair<iterator, bool> insert(     const value_type& Val );   // (2) single element, perfect forwarded template<class ValTy> pair<iterator, bool> insert(     ValTy&& Val );  // (3) single element with hint iterator insert(     const_iterator Where,     const value_type& Val );   // (4) single element, perfect forwarded, with hint template<class ValTy> iterator insert(     const_iterator Where,     ValTy&& Val );  // (5) range  template<class InputIterator>  void insert(     InputIterator First,     InputIterator Last );   // (6) initializer list void insert(     initializer_list<value_type> IList ); 

參數

參數

描述

Val

除非其中包含了值已經過對等地排序的元素,否則為要插入 set 中的元素值。

Where

要開始搜尋正確的插入點的地方 (若該點緊接於 Where 之前,則可能會在分攤常數時間插入,而不是對數時間)。

ValTy

範本參數,指定 set 可用於建構 value_type 的元素的引數類型,並將 Val 做為引數完美轉送。

First

要複製之第一個元素的位置。

Last

要複製之最一個元素後方的位置。

InputIterator

範本函式引數,符合輸入迭代器的需求,而迭代器會指向可用於建構 value_type 物件之類型的元素。

IList

要從中複製元素的 initializer_list

傳回值

單一元素成員函式 (1) 和 (2) 會傳回 pair,其中 bool 元件為 True (若執行插入),若 set 已包含依順序排列之對等值的元素,則為 False。 若 bool 元件為 True,傳回值組的迭代器元件會指向最新插入的元素;若 bool 元件為 False,則會指向現有元素。

具有提示的單一元素成員函式 (3) 及 (4) 會傳回指向位置的迭代器,該位置是新元素插入 set 中的位置,或者,若具有對等索引鍵的元素已存在,則指向現有元素。

備註

此函式不會使任何迭代器、指標或參考無效。

在只插入一個元素的期間,若擲出例外狀況,則不會修改容器的狀態。 在插入多個元素期間,若擲出例外狀況,則容器會處於未指定但有效的狀態。

若要存取 pair pr 的迭代器元件 (由單一元素成員函式傳回),請使用 pr.first;若要對傳回的 pair 中的迭代器取值,請使用 *pr.first (提供您元素)。 若要存取 bool 元件,請使用 pr.second。 例如,請參閱本文稍後的範例程式碼。

容器的 value_type 是屬於容器的 typedef,而針對 set,set<V>::value_type 是類型 const V。

範圍成員函式 (5) 會將元素值序列插入 set,而 set 對應至範圍 [First, Last) 中迭代器指定的每個元素;因此不會插入 Last。 容器成員函式 end() 是指容器中最後一個項元素後方的位置;例如,陳述式 s.insert(v.begin(), v.end()); 嘗試將 v 的所有元素插入 s 中。 只會插入具有範圍中唯一值的元素;若重複則會忽略。 若要觀察哪些元素會遭到拒絕,請使用單一元素版本的 insert

初始設定式清單成員函式 (6) 使用 initializer_list 將元素複製到 set。

如需插入就地建構的元素 (換言之即為未執行複製或移動作業),請參閱 set::emplaceset::emplace_hint

範例

// set_insert.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: ";

    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{

    // insert single values 
    set<int> s1;
    // call insert(const value_type&) version
    s1.insert({ 1, 10 });
    // call insert(ValTy&&) version 
    s1.insert(20);

    cout << "The original set values of s1 are:" << endl;
    print(s1);

    // intentionally attempt a duplicate, single element
    auto ret = s1.insert(1);
    if (!ret.second){
        auto elem = *ret.first;
        cout << "Insert failed, element with value 1 already exists."
            << endl << "  The existing element is (" << elem << ")"
            << endl;
    }
    else{
        cout << "The modified set values of s1 are:" << endl;
        print(s1);
    }
    cout << endl;

    // single element, with hint
    s1.insert(s1.end(), 30);
    cout << "The modified set values of s1 are:" << endl;
    print(s1);
    cout << endl;


    // The templatized version inserting a jumbled range
    set<int> s2;
    vector<int> v;
    v.push_back(43);
    v.push_back(294);
    v.push_back(41);
    v.push_back(330);
    v.push_back(42);
    v.push_back(45);

    cout << "Inserting the following vector data into s2:" << endl;
    print(v);

    s2.insert(v.begin(), v.end());

    cout << "The modified set values of s2 are:" << endl;
    print(s2);
    cout << endl;

    // The templatized versions move-constructing elements
    set<string>  s3;
    string str1("blue"), str2("green");

    // single element
    s3.insert(move(str1));
    cout << "After the first move insertion, s3 contains:" << endl;
    print(s3);

    // single element with hint
    s3.insert(s3.end(), move(str2));
    cout << "After the second move insertion, s3 contains:" << endl;
    print(s3);
    cout << endl;

    set<int> s4;
    // Insert the elements from an initializer_list
    s4.insert({ 4, 44, 2, 22, 3, 33, 1, 11, 5, 55 });
    cout << "After initializer_list insertion, s4 contains:" << endl;
    print(s4);
    cout << endl;
}

輸出

The original set values of s1 are:
3 elements: (1) (10) (20)
Insert failed, element with value 1 already exists.
  The existing element is (1)

The modified set values of s1 are:
4 elements: (1) (10) (20) (30)

Inserting the following vector data into s2:
6 elements: (43) (294) (41) (330) (42) (45)
The modified set values of s2 are:
6 elements: (41) (42) (43) (45) (294) (330)

After the first move insertion, s3 contains:
1 elements: (blue)
After the second move insertion, s3 contains:
2 elements: (blue) (green)

After initializer_list insertion, s4 contains:
10 elements: (1) (2) (3) (4) (5) (11) (22) (33) (44) (55)

需求

標頭:<set>

命名空間: std

請參閱

參考

<set>

set 類別

multiset::insert

標準樣板程式庫