映射是关联容器,以映射方式存储元素。每个元素都有一个键值和一个映射值。任何两个映射值都不能具有相等的键值。默认情况下,C++中的Map根据其键以升序排序。以下是实现此目的的各种方法:
方法1 –使用向量对的想法是将地图中的所有内容复制到对应的向量对,并使用下面给出的lambda函数根据第二个值对向量对进行排序:
bool cmp(pair& a,
pair& b)
{
return a.second < b.second;
}
where T1 and T2
are the data-types
that can be the
same or different.
下面是上述方法的实现:
// C++ program for the above approach
#include
using namespace std;
// Comparator function to sort pairs
// according to second value
bool cmp(pair& a,
pair& b)
{
return a.second < b.second;
}
// Function to sort the map according
// to value in a (key-value) pairs
void sort(map& M)
{
// Declare vector of pairs
vector > A;
// Copy key-value pair from Map
// to vector of pairs
for (auto& it : M) {
A.push_back(it);
}
// Sort using comparator function
sort(A.begin(), A.end(), cmp);
// Print the sorted value
for (auto& it : A) {
cout << it.first << ' '
<< it.second << endl;
}
}
// Driver Code
int main()
{
// Declare Map
map M;
// Given Map
M = { { "GfG", 3 },
{ "To", 2 },
{ "Welcome", 1 } };
// Function Call
sort(M);
return 0;
}
输出:
Welcome 1
To 2
GfG 3
方法2 –使用对对的想法是将映射中的所有(键值)对插入对对的集合中,该对对可以使用比较器函数构造,该比较器函数根据第二个值对对进行排序。
下面是上述方法的实现:
// C++ program for the above approach
#include
using namespace std;
// Comparison function for sorting the
// set by increasing order of its pair's
// second value
struct comp {
template
// Comparator function
bool operator()(const T& l,
const T& r) const
{
if (l.second != r.second) {
return l.second < r.second;
}
return l.first < r.first;
}
};
// Function to sort the map according
// to value in a (key-value) pairs
void sort(map& M)
{
// Declare set of pairs and insert
// pairs according to the comparator
// function comp()
set, comp> S(M.begin(),
M.end());
// Print the sorted value
for (auto& it : S) {
cout << it.first << ' '
<< it.second << endl;
}
}
// Driver Code
int main()
{
// Declare Map
map M;
// Given Map
M = { { "GfG", 3 },
{ "To", 2 },
{ "Welcome", 1 } };
// Function Call
sort(M);
return 0;
}
输出:
Welcome 1
To 2
GfG 3
方法3 –使用多图
多重地图类似于地图,不同之处在于多个元素可以具有相同的键。在这种情况下,键值和映射值对必须是唯一的,而不是每个元素都是唯一的。
想法是将给定地图中的所有对都插入到多张地图中,使用原始地图的值作为多张地图中的键,并将原始地图的键值作为多张地图中的值。
下面是上述方法的实现:
// C++ program for the above approach
#include
using namespace std;
// Function to sort the map according
// to value in a (key-value) pairs
void sort(map& M)
{
// Declare a multimap
multimap MM;
// Insert every (key-value) pairs from
// map M to multimap MM as (value-key)
// pairs
for (auto& it : M) {
MM.insert({ it.second, it.first });
}
// Print the multimap
for (auto& it : MM) {
cout << it.second << ' '
<< it.first << endl;
}
}
// Driver Code
int main()
{
// Declare Map
map M;
// Given Map
M = { { "GfG", 3 },
{ "To", 2 },
{ "Welcome", 1 } };
// Function Call
sort(M);
return 0;
}
输出:
Welcome 1
To 2
GfG 3
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。