例子:
#include
#include
#include
iter->first: 1, iter->second: 1
iter->first: 2, iter->second: 2
注意: insert(iter1, iter2)返回值是void
例子:
#include
#include
#include
pret.second: 1, pret.first->first: 3, pret.first->second: 3
pret.second: 0, pret.first->first: 1, pret.first->second: 1
分析:insert(pair<...>) 版本返回值是一个pair结构,其中第一个元素是一个迭代器,第二个元素是一个bool类型,根据以上结果:如果原来的map中不含有插入的元素,则bool为true,迭代器指向插入的元素;如果map中已经含有插入的元素了,则bool为false,返回的迭代器指向对应的map中已经存在的元素
例子:
#include
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
map imap;
map jmap;
jmap[1] = 1;
jmap[2] = 2;
imap.insert(jmap.begin(), jmap.end());
map::iterator ret = imap.insert(imap.begin(), pair(1, 1));
printf("ret->first: %d, ret->end: %d\n", ret->first, ret->second);
ret = imap.insert(imap.begin(), pair(3, 3));
printf("ret->first: %d, ret->end: %d\n", ret->first, ret->second);
getchar();
return 0;
}
运行结果为:
ret->first: 1, ret->end: 1
ret->first: 3, ret->end: 3
分析:insert(iter, pair<...>)返回一个指向插入元素的迭代器,如果map中已经存在元素,则返回的迭代器指向原先map中已经存在的元素
例子:
#include
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
map kmap;
//std::initializer_list > list = { pair(10, 10), pair(20, 20), pair(30, 30) }; //error
kmap.insert({ pair(10, 10), pair(20, 20), pair(30, 30) });
map::iterator iter = kmap.begin();
for (; iter != kmap.end(); iter++)
printf("iter->first: %d, iter->second: %d\n", iter->first, iter->second);
//MapInsert();
getchar();
return 0;
}
iter->first: 10, iter->second: 10
iter->first: 20, iter->second: 20
iter->first: 30, iter->second: 30
例子:
#include
#include
#include
#include
using namespace std;
class People
{
public:
People(const char* name, int age)
{
printf("constructor People\n");
strcpy(m_name, name);
m_age = age;
}
virtual ~People()
{
printf("destructor People\n");
}
public:
virtual void Print() = 0;
protected:
char m_name[10];
int m_age;
};
class Stu: public People
{
public:
Stu(const char* name, int age) : People(name, age)
{
printf("constructor Stu\n");
}
~Stu()
{
printf("destructor Stu\n");
}
public:
void Print()
{
printf("This is Stu Print, name: %s, age: %d\n", m_name, m_age);
}
};
class Worker : public People
{
public:
Worker(const char* name, int age) : People(name, age)
{
printf("constructor worker\n");
}
~Worker()
{
printf("destructor worker\n");
}
public:
void Print()
{
printf("This is Worker Print, name: %s, age: %d\n", m_name, m_age);
}
};
void MapInsert()
{
typedef map >::iterator Iterator;
typedef pair > Pair;
pair stu_pair[3] = { make_pair("Peter", 10), make_pair("Rei", 14), make_pair("Kai", 16)};
pair wor_pair[3] = { make_pair("Jet", 20), make_pair("Piker", 24), make_pair("Ein", 26) };
map > insert_map;
for (int i = 0; i < 3; i++)
pair ret = insert_map.insert(Pair(stu_pair[i].first, make_shared(stu_pair[i].first.c_str(), stu_pair[i].second)));
for (int i = 0; i < 3; i++)
pair ret = insert_map.insert(Pair(wor_pair[i].first, make_shared(wor_pair[i].first.c_str(), wor_pair[i].second)));
Iterator iter = insert_map.begin();
for (; iter != insert_map.end(); iter++)
{
printf("%s: ", iter->first.c_str());
iter->second->Print();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
MapInsert();
getchar();
return 0;
}
运行结果如下:
constructor Stu
constructor People
constructor worker
constructor People
constructor worker
constructor People
constructor worker
Ein: This is Worker Print, name: Ein, age: 26
Jet: This is Worker Print, name: Jet, age: 20
Kai: This is Stu Print, name: Kai, age: 16
Peter: This is Stu Print, name: Peter, age: 10
Piker: This is Worker Print, name: Piker, age: 24
Rei: This is Stu Print, name: Rei, age: 14
destructor Stu
destructor People
destructor worker
destructor People
destructor Stu
destructor People
destructor Stu
destructor People
destructor worker
destructor People
destructor worker
destructor People
分析:map中插入不同于map指定的元素类别的时候,如果插入的类别可以转换成map允许插入的类别的话,map会帮你自动转换,如果不能转换则不能插入
map
imap.insert(pair
imap.insert(pair
imap.insert(pair