先决条件:在STL中映射
顾名思义, 地图是一个容器, 存储键值对。地图具有以下优势:在地图上搜寻, 由"键"定义仅O(1)时间复杂度, 因此使其在各种编码领域中都非常有用。本文讨论插入。
使用insert()
:插入功能用于在地图中插入键值对。插入后, 将对元素进行重新排序, 并使用键对地图进行排序。
此功能通过3种方式实现:
- 插入(对):此函数将配对插入地图。插入仅在密钥通过时发生不是已经设定。
它返回一个指针对。指向已经存在或新插入的对的第一个元素。返回布尔状态为" true"或" false"的第二个元素。
时间复杂度:log(n), 其中n是地图的大小 - 插入(提示, 一对):在此实现中, 提示指针与要插入的线对一起发送。提示指针的使用是为了帮助insert()知道实际的插入位置。因此, 尝试减少分配对的时间。
提示指针不会在特定位置强制插入。该功能将指针返回到该位置插入对的位置。
时间复杂度:log(n)其中n是地图的大小, 如果提示是最佳的, 则O(1) - 插入(beg_ptr, end_ptr):这种类型的插入是必需的插入其他容器对进入地图。如果重复对在目标容器中存在, 则不会插入。
时间复杂度:k * log(n), 其中n是地图的大小, k为否。插入的元素数
// C++ code to demonstrate the working of insert()#include<
iostream>
#include<
map>
// for map operations
using namespace std;
int main()
{
// declaring map
// of char and int
map<
char , int >
mp;
// declaring iterators
map<
char , int >
::iterator it ;
map<
char , int >
::iterator it1;
map<
char , int >
::iterator it2;
// declaring pair for return value of map containing
// map iterator and bool
pair <
map<
char , int >
::iterator, bool >
ptr;
// using insert() to insert single pair
// inserting 'a' with 20
ptr = mp.insert( pair<
char , int >
( 'a' , 20) );
// checking if the key was already present or newly inserted
if (ptr.second)
cout <
<
"The key was newly inserted" ;
else
cout <
<
"The key was already present" ;
cout <
<
endl ;
// printing map pairs after insertion
cout <
<
"The map pairs after 1st insertion are : \n" ;
for (it1 = mp.begin();
it1!=mp.end();
++it1)
cout <
<
it1->
first <
<
"->
" <
<
it1->
second <
<
endl;
it = mp.begin();
// inserting map pair using hint
mp.insert(it, pair<
char , int >
( 'b' , 24) );
cout <
<
endl ;
// printing map pairs after insertion
cout <
<
"The map pairs after 2nd insertion are : \n" ;
for (it1 = mp.begin();
it1!=mp.end();
++it1)
cout <
<
it1->
first <
<
"->
" <
<
it1->
second <
<
endl;
// initializing another map
map<
char , int >
mp2;
// using insert(beg_iter, end_iter) to copy all elements
mp2.insert(mp.begin(), mp.end());
cout <
<
endl ;
// printing new map pairs after insertion
cout <
<
"The new map pairs after insertion are : \n" ;
for (it1 = mp2.begin();
it1!=mp2.end();
++it1)
cout <
<
it1->
first <
<
"->
" <
<
it1->
second <
<
endl;
}
输出如下:
The key was newly insertedThe map pairs after 1st insertion are : a->
20The map pairs after 2nd insertion are : a->
20b->
24The new map pairs after insertion are : a->
20b->
24
使用Emplace
:emplace也用于将配对插入地图。此函数类似于上面讨论的" insert()", 唯一的区别是
"就地"建设
对的发生在与插入或复制现有对象的insert()相反的元素插入位置。
- emplace():使用就地构建策略插入对。将映射的大小增加1.。返回一个指针对。第一个元素是迭代器, 它指向插入对的位置。 2nd返回一个布尔变量, 指示已经存在或新创建的对。
时间复杂度:日志(n)(n是地图的大小) - emplace_hint():需要" hint_iterator"以获得插入位置的提示, 以可能减少插入已插入对的时间。这不会影响插入位置。它发生在内部定义的地方。
时间复杂度:日志(n)(n是地图的大小), 如果提示是最佳的, 则O(1)
// C++ code to demonstrate the working of emplace()
// and emplace_hint()
#include<
iostream>
#include<
map>
// for map operations
using namespace std;
int main()
{
// declaring map
map<
char , int >
mp;
// declaring iterators
map<
char , int >
::iterator it;
map<
char , int >
::iterator it1;
map<
char , int >
::iterator it2;
// declaring pair for return value of map containing
// map iterator and bool
pair<
map<
char , int >
::iterator, bool >
ptr;
// using emplace() to insert pair element
// inserting 'a' to 24
// no "pair" needed, in-place construction
ptr = mp.emplace( 'a' , 24);
// checking if the pair was already present or newly inserted
// returns true. newly inserted
if (ptr.second)
cout <
<
"The key was newly inserted" ;
else
cout <
<
"The key was already present" ;
cout <
<
endl;
// printing map pairs after insertion
cout <
<
"The map pairs after 1st insertion are : \n" ;
for (it1 = mp.begin();
it1!=mp.end();
++it1)
cout <
<
it1->
first <
<
"->
" <
<
it1->
second <
<
endl;
cout <
<
endl ;
// using emplace() to insert single pair
// inserting a to 24 // not inserted this time
ptr = mp.emplace( 'a' , 24);
// checking if the key was already present or newly inserted
// returns false. already inserted
if (ptr.second)
cout <
<
"The key was newly inserted" ;
else
cout <
<
"The key was already present" ;
cout <
<
endl ;
// printing map pairs after insertion
cout <
<
"The map pairs after 2nd insertion are : \n" ;
for (it1 = mp.begin();
it1!=mp.end();
++it1)
cout <
<
it1->
first <
<
"->
" <
<
it1->
second <
<
endl;
it = mp.begin();
// inserting map pair using hint
mp.emplace_hint(it, 'b' , 20);
cout <
<
endl ;
// printing map pairs after insertion
cout <
<
"The map pairs after 3rd insertion are : \n" ;
for (it1 = mp.begin();
it1!=mp.end();
++it1)
cout <
<
it1->
first <
<
"->
" <
<
it1->
second <
<
endl;
}
输出如下:
The key was newly insertedThe map pairs after 1st insertion are : a->
24The key was already presentThe map pairs after 2nd insertion are : a->
24The map pairs after 3rd insertion are : a->
24b->
20
使用运算符[]
:" []"也可用于在地图中插入元素。与上述函数类似, 将指针返回到新构造的元素。区别在于此运算符
总是构造一个新元素
即, 即使未将值映射到键, 也会调用默认构造函数, 并将默认值" null"或"空"分配给键。
【在std::map中插入元素(插入,插入和运算符[])】尺寸
的地图是
总是增加1
.
时间复杂度:log(n), 其中n是地图的大小
// C++ code to demonstrate the working of operator[]#include<
iostream>
#include<
map>
// for map operations
using namespace std;
int main()
{
// declaring map
map<
char , int >
mp;
// using [] to assign key to value
mp[ 'a' ] = 5;
mp[ 'b' ] = 6;
mp[ 'c' ] = 2;
// printing values
cout <
<
"The element keys to a is : " ;
cout <
<
mp[ 'a' ] <
<
endl;
cout <
<
"The element keys to b is : " ;
cout <
<
mp[ 'b' ] <
<
endl;
cout <
<
"The element keys to c is : " ;
cout <
<
mp[ 'c' ] <
<
endl;
// default constructor is called
// prints 0
cout <
<
"The element keys to d is : " ;
cout <
<
mp[ 'd' ] <
<
endl;
}
输出如下:
The element keys to a is : 5The element keys to b is : 6The element keys to c is : 2The element keys to d is : 0
相关文章:在Map STL C ++中搜索
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C ++ STL通过激烈的问题解决过程来训练和掌握这些概念。
推荐阅读
- Java比较器接口介绍和示例
- Scala选项Option用法介绍和解释
- 诺基亚网络面试体验
- C++中的reinterpret_cast用法介绍 |类型转换运算符
- 硬盘分区表修好,本文教您如何修好硬盘分区表
- 0x000000ED,本文教您电脑出现STOP:0x000000ED蓝屏问题如何修好
- 华硕主板怎样设置u盘打开,本文教您华硕主板怎样设置u盘打开
- 制作u盘系统安装盘,本文教您u盘系统安装盘如何制作
- 戴尔台式机bios设置,本文教您戴尔设置U盘打开