C++中vector,set,map自定義排序

1.vector

(1)逆序

#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
	vector<int>obj;

	obj.push_back(1);
	obj.push_back(3);
	obj.push_back(0);

	sort(obj.begin(), obj.end());//從小到大

	cout << "從小到大:" << endl;
	for (int i = 0; i < obj.size(); i++)
	{
		cout << obj[i] << ",";
	}

	cout << "\n" << endl;

	cout << "從大到小:" << endl;
	reverse(obj.begin(), obj.end());//從大到小 
	for (int i = 0; i < obj.size(); i++)
	{
		cout << obj[i] << ",";
	}
	getchar();
	return 0;
}
#include <iostream>
#include <algorithm>
#include <string>
#include <vector> 
typedef long long ll;
using namespace std;
bool cmp(int a, int b) {
	return a > b;
}
int main()
{
	cout << "VECTOR" << endl;
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	sort(v.begin(), v.end(), cmp);
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << endl;
	}
	getchar();
}

2.set

(1)逆序

#include <iostream>
#include <algorithm>
#include <string>
#include <set> 

using namespace std;

int main()
{
	set<int, greater<int> > s;
	s.insert(1);
	s.insert(2);
	s.insert(3);
	s.insert(4);
	cout << "SET" << endl;
	for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
		cout << *it << endl;
	}
	getchar();
}

3.map

(1)key值,逆序

#include <iostream>
#include <algorithm>
#include <string>
#include <map>

using namespace std;

int main()
{
	cout << "MAP" << endl;
	map<char, int, greater<char> > m;
	m['c'] = 1;
	m['b'] = 2;
	m['a'] = 3;
	for (map<char, int>::iterator it = m.begin(); it != m.end(); it++) {
		cout << it->first << " " << it->second << endl;
	}
	getchar();
}

(2)key值,自定義排序

#include<iostream>
#include<algorithm>
#include<string>
#include<map>

using namespace std;


struct CmpByKeyLength {
	bool operator()(const string& k1, const string& k2)const {
		return k1.length() < k2.length();
	}
};

int main()
{
	//1、map這裏指定less作爲其默認比較函數(對象),就是默認按鍵值升序排列
	// map<string, int> name_score_map;

	// 2、可以自定義,按照鍵值升序排列,注意加載 
	// #include <functional> // std::greater
	// map<string, int, greater<string>> name_score_map;

	//3、按照自定義內容進行排序,比如字符串的長度
	map<string, int, CmpByKeyLength> name_score_map;

	name_score_map["LiMin"] = 90;
	name_score_map["ZiLinMi"] = 79;
	name_score_map["BoB"] = 92;
	name_score_map.insert(make_pair("Bing", 99));
	name_score_map.insert(make_pair("Albert", 86));

	map<string, int>::iterator iter;
	for (iter = name_score_map.begin(); iter != name_score_map.end(); ++iter) {
		cout << (*iter).first << endl;
	}
	system("pause");
	return 0;
}

(3)value,排序

#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<vector>

using namespace std;

bool cmp(const pair<string, int>& a, const pair<string, int>& b) {
	return a.second < b.second;
}

int main()
{
	//1、map這裏指定less作爲其默認比較函數(對象),就是默認按鍵值升序排列
	map<string, int> name_score_map;
	name_score_map["LiMin"] = 90;
	name_score_map["ZiLinMi"] = 79;
	name_score_map["BoB"] = 92;
	name_score_map.insert(make_pair("Bing", 99));
	name_score_map.insert(make_pair("Albert", 86));

	//輸出添加的內容
	map<string, int>::iterator iter;
	for (iter = name_score_map.begin(); iter != name_score_map.end(); ++iter) {
		cout << (*iter).first << ":" << (*iter).second << endl;
	}
	cout << endl;

	// 將map中的內容轉存到vector中
	vector<pair<string, int>> vec(name_score_map.begin(), name_score_map.end());
	//對線性的vector進行排序
	sort(vec.begin(), vec.end(), cmp);
	for (int i = 0; i < vec.size(); ++i)
		cout << vec[i].first << ":" << vec[i].second << endl;

	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章