C++ STL的unordered_set insert()函数
unordered_set::insert()是C++ STL的内置函数,用于在unordered_set容器中插入新{元素}。仅当元素在容器中不存在时,才会插入每个元素(unordered_set中的元素具有唯一值)。插入是根据容器的准则自动完成的(因为它使用不同的哈希函数),在相应的位置插入。这会通过插入的元素数量有效地增加容器大小。
语法:
unordered_set_name.insert (value)
或者,
unordered_set_name.insert (InputIterator first, InputIterator last)
参数:
- value :它指定要插入到容器中的值。
- first , last :指定一系列元素的迭代器。在unordered_set容器中插入范围[first,last)中的元素的副本。请记住,范围包括first和last之间的所有元素,包括由first指向但不是指向的元素由last指向。
返回值: 该函数返回一个pair,其成员pair::first设置为指向新插入的元素或已经在集合中的等效元素的迭代器。对中pair::second元素集合中存在相同元素时设置为true,已经存在等效的元素时设置为false。
以下是说明上述函数的程序:
时间复杂度: 插入()方法的时间复杂度为O(1)。
程序1: :
#include<iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<string> mySet = { "first", "third" };
string myString = "tenth";
// inserts key in set
mySet.insert(myString);
cout << "My set contains:"
<< endl;
for (const string& x : mySet) {
cout << x
<< " ";
}
cout << endl;
return 0;
}
输出:
My set contains:
tenth first third
程序2: :
// C++ program to illustrate
// unordered_set::insert()
#include <array>
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<std::string> mySet = { "first",
"third", "second" };
array<std::string, 2> myArray = { "tenth",
"seventh" };
string myString = "ninth";
mySet.insert(myString);
// array elements range insertion in set
mySet.insert(myArray.begin(), myArray.end());
// initializer list insertion
mySet.insert({ "fourth", "sixth" });
cout << "myset contains:"
<< endl;
for (const string& x : mySet) {
cout << x
<< " ";
}
cout << endl;
return 0;
}
输出:
myset contains:
sixth fourth seventh first tenth second third ninth
程序3:
// C++程序说明
// unordered_set::insert() 返回值
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//显示unordered set中元素的函数
void display_elements(unordered_set<int> &u_set)
{
cout<<"unordered set中的元素为:";
for(auto it:u_set)
{
cout<<it <<" ";
}
cout<<endl;
}
int main() {
unordered_set<int> u_set;
cout<<"u_set.insert(1).second: "<<u_set.insert(1).second<<endl; //成功插入返回true,否则返回false。
cout<<"*(u_set.insert(1).first): "<<*(u_set.insert(1).first)<<endl;
//first是插入元素的迭代器,如果元素不在u_set中,
//即返回非重复元素的迭代器,否则返回指向重复元素的迭代器
cout<<"u_set.insert(1).second: "<<u_set.insert(1).second<<endl;
cout<<"*(u_set.insert(1).first): "<<*(u_set.insert(1).first)<<endl;
cout<<"u_set.insert(2).second: "<<u_set.insert(2).second<<endl; //成功插入返回true,否则返回false。
cout<<"*(u_set.insert(2).first): "<<*(u_set.insert(2).first)<<endl;
display_elements(u_set);
return 0;
}
输出结果
u_set.insert(1).second: 1
*(u_set.insert(1).first): 1
u_set.insert(1).second: 0
*(u_set.insert(1).first): 1
u_set.insert(2).second: 1
*(u_set.insert(2).first): 2
unordered set中的元素为:2 1