c++ STL顺序容器vector/关联容器map的合并

最近工作中用到了unordered_map的合并,现在把c++中两个常用容器vector和map的合并方法总结一下。

一、vector的合并

(1)insert()方法

#include 
#include 
using namespace std;

int main() {
	vector v1;
	vector v2;

	for (int i = 0; i < 5; i++) {
		v1.push_back(i);          //v1的元素:0,1,2,3,4
		v2.push_back(i + 2);      //v2的元素:2,3,4,5,6
	}

	vector v3;
	v3.insert(v3.end(), v1.begin(), v1.end());//将v1压入
	v3.insert(v3.end(), v2.begin(), v2.end());//继续将v2压入

	for (int i = 0; i < v3.size(); i++) {
		cout << v3[i] << endl;//输出0,1,2,3,4,2,3,4,5,6
	}
}

(2)merge()方法:merge() 函数用于将 2 个有序序列合并为 1 个有序序列,前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。

#include 
#include 
#include 
using namespace std;

int main() {
	vector v1;
	vector v2;

	for (int i = 0; i < 5; i++) {
		v1.push_back(i);          //v1的元素:0,1,2,3,4
		v2.push_back(i + 2);      //v2的元素:2,3,4,5,6
	}

	vector v3(10);//要提前确定v3的size
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
    //以默认的升序排序作为排序规则

	for (int i = 0; i < v3.size(); i++) {
		cout << v3[i] << endl;//输出0,1,2,2,3,3,4,4,5,6
	}
}

(3)set_union()方法

#include 
#include 
#include 
#include 
using namespace std;

int main() {
	vector v1;
	vector v2;

	for (int i = 0; i < 5; i++) {
		v1.push_back(i);          //v1的元素:0,1,2,3,4
		v2.push_back(i + 2);      //v2的元素:2,3,4,5,6
	}

	vector v3;
	set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v3));//带有去重和排序效果

	for (int i = 0; i < v3.size(); i++) {
		cout << v3[i] << endl;//输出0,1,2,3,4,5,6
	}
}

二、map的合并

insert()方法

#include 
#include 
using namespace std;

int main() {
	std::map m1 = { { 1, 1 },{ 2, 1 },{ 3, 1 },{ 4, 1 },{ 5, 1 } };
	std::map m2 = { { 3, 2 },{ 4, 2 },{ 5, 2 },{ 6, 2 },{ 7, 2 } };
	std::map m3 = m1;

	m3.insert(m2.begin(), m2.end());

	for (auto iter = m3.begin(); iter != m3.end(); iter++) {
		cout << iter->first << ":" << iter->second<< endl;/*输出1 : 1
																2 : 1
																3 : 1
																4 : 1
																5 : 1
																6 : 2
																7 : 2*/
	}
}

多个map合并,循环insert即可:

#include 
#include 
using namespace std;

int main() {
	std::map m1 = { { 1, 1 },{ 2, 1 },{ 3, 1 },{ 4, 1 },{ 5, 1 } };
	std::map m2 = { { 3, 2 },{ 4, 2 },{ 5, 2 },{ 6, 2 },{ 7, 2 } };
	std::map m3 = { { 8, 2 },{ 9, 2 } };

	std::map> tmp;
	tmp.insert({ 1,m1 });
	tmp.insert({ 2,m2 });
	tmp.insert({ 3,m3 });

	std::map m_res;
	auto iter = tmp.begin();
	for (; iter != tmp.end(); ++iter) {
		m_res.insert(iter->second.begin(), iter->second.end());
	}

	for (auto iter = m_res.begin(); iter != m_res.end(); iter++) {
		cout << iter->first << ":" << iter->second<< endl;/*输出
															1:1
															2:1
															3:1
															4:1
															5:1
															6:2
															7:2
															8:2
															9:2*/
	}
}

你可能感兴趣的:(c++,stl,map,算法)