📜  在C++标准模板库(STL)中设置

📅  最后修改于: 2021-04-29 16:57:19             🧑  作者: Mango

集是一种关联容器,其中每个元素都必须是唯一的,因为元素的值可以标识它。尽管可以删除并添加该元素的修改后的值,但是一旦将元素的值添加到集合中就无法对其进行修改。
与Set相关的一些基本功能:

  • begin()–将迭代器返回到集合中的第一个元素。
  • end()–将迭代器返回到集合中最后一个元素之后的理论元素。
  • size()–返回集合中元素的数量。
  • max_size()–返回集合可以容纳的最大元素数。
  • empty()–返回集合是否为空。
CPP
#include 
#include 
#include 
 
using namespace std;
 
int main()
{
    // empty set container
    set > s1;
 
    // insert elements in random order
    s1.insert(40);
    s1.insert(30);
    s1.insert(60);
    s1.insert(20);
    s1.insert(50);
     
    // only one 50 will be added to the set
    s1.insert(50);
    s1.insert(10);
 
    // printing set s1
    set >::iterator itr;
    cout << "\nThe set s1 is : \n";
    for (itr = s1.begin(); itr != s1.end(); itr++)
    {
        cout << *itr<<" ";
    }
    cout << endl;
 
    // assigning the elements from s1 to s2
    set s2(s1.begin(), s1.end());
 
    // print all elements of the set s2
    cout << "\nThe set s2 after assign from s1 is : \n";
    for (itr = s2.begin(); itr != s2.end(); itr++)
    {
        cout << *itr<<" ";
    }
    cout << endl;
 
    // remove all elements up to 30 in s2
    cout
        << "\ns2 after removal of elements less than 30 :\n";
    s2.erase(s2.begin(), s2.find(30));
    for (itr = s2.begin(); itr != s2.end(); itr++) {
        cout <<*itr<<" ";
    }
 
    // remove element with value 50 in s2
    int num;
    num = s2.erase(50);
    cout << "\ns2.erase(50) : ";
    cout << num << " removed\n";
    for (itr = s2.begin(); itr != s2.end(); itr++)
    {
        cout <<*itr<<" ";
    }
 
    cout << endl;
 
    // lower bound and upper bound for set s1
    cout << "s1.lower_bound(40) : \n"
         << *s1.lower_bound(40)
         << endl;
    cout << "s1.upper_bound(40) : \n"
         << *s1.upper_bound(40)
         << endl;
 
    // lower bound and upper bound for set s2
    cout << "s2.lower_bound(40) :\n"
         << *s2.lower_bound(40)
         << endl;
    cout << "s2.upper_bound(40) : \n"
         << *s2.upper_bound(40)
         << endl;
 
    return 0;
}


输出
The set s1 is : 
60 50 40 30 20 10 

The set s2 after assign from s1 is : 
10 20 30 40 50 60 

s2 after removal of elements less than 30 :
30 40 50 60 
s2.erase(50) : 1 removed
30 40 60 
s1.lower_bound(40) : 
40
s1.upper_bound(40) : 
30
s2.lower_bound(40) :
40
s2.upper_bound(40) : 
60

设置方法:

  • begin()–将迭代器返回到集合中的第一个元素。
  • end()–将迭代器返回到集合中最后一个元素之后的理论元素。
  • rbegin()–返回指向容器中最后一个元素的反向迭代器。
  • rend()–返回一个反向迭代器,该迭代器指向set容器中第一个元素之前的理论元素。
  • crbegin()–返回指向容器中最后一个元素的常量迭代器。
  • crend()–返回一个常量迭代器,该迭代器指向容器中第一个元素之前的位置。
  • cbegin()–返回指向容器中第一个元素的常量迭代器。
  • cend()–返回一个常量迭代器,该迭代器指向容器中最后一个元素之后的位置。
  • size()–返回集合中元素的数量。
  • max_size()–返回集合可以容纳的最大元素数。
  • empty()–返回集合是否为空。
  • insert(const g)–将新元素“ g”添加到集合中。
  • 迭代器插入(迭代器位置,常量g)–在迭代器指向的位置添加新元素’g’。
  • 擦除(迭代器位置)–删除迭代器指向的位置上的元素。
  • delete(const g)–从集合中删除值“ g”。
  • clear()–从集合中删除所有元素。
  • key_comp()/ value_comp()–返回确定集合中元素排序方式的对象(默认为'<‘)。
  • find(const g)–如果存在,则返回集合中元素’g’的迭代器,否则返回迭代器结束。
  • count(const g)–根据元素“ g”是否存在于集合中返回1或0。
  • lower_bound(const g)–将迭代器返回到等效于’g’的第一个元素,或者绝对不会出现在集合中的元素’g’之前。
  • upper_bound(const g)–返回一个迭代器,该迭代器将返回集合中元素“ g”之后的第一个元素。
  • equal_range()–该函数返回一个成对的迭代器。 (key_comp)。该对是指包含容器中所有具有等于k的键的元素的范围。
  • emplace()–仅当要插入的元素是唯一的并且在集合中尚不存在时,才使用此函数将新元素插入到集合容器中。
  • emplace_hint()–返回指向插入位置的迭代器。如果在参数中传递的元素已经存在,则它将返回一个迭代器,该迭代器指向现有元素所在的位置。
  • swap()–此函数用于交换两个集合的内容,但是集合的类型必须相同,尽管大小可能会有所不同。
  • 运算符= –’=’是C++ STL中的运算符,它将一个集复制(或移动)到另一个集,而set :: 运算符=是相应的运算符函数。
  • get_allocator()–返回与集合关联的分配器对象的副本。

最近的文章集