C++ 中对的多重映射与示例
什么是多图?
在 C++ 中,multimap 是一个关联容器,用于以映射方式存储元素。在内部,multimap 被实现为红黑树。多重映射的每个元素都被视为一对。第一个值称为键,第二个值称为值。 Multimap 与 map 非常相似,但在 multimap 的情况下,我们可以有多个相同的键。此外,我们不能使用方括号 ([]) 来访问键映射的值。与地图一样,多地图的键默认按升序排序。
与多图相关的功能:
- begin() :返回一个迭代器,指向多重映射中的第一个元素
- end() :返回一个迭代器,指向多重映射中最后一个元素之后的理论元素
- size() :返回多图中的元素数量
- max_size() :返回多图可以容纳的最大元素数
- empty() :返回多图是否为空
- insert(key, value) :向多图添加一个新元素或对
- erase(iterator position) :删除迭代器指向的位置的元素
- erase(const x) :从多图中删除键值“x”
- clear() :从多图中删除所有元素
什么是一对?
C++ 中的实用程序标头为我们提供了配对容器。一对由两个数据元素或对象组成。
- 第一个元素被称为“第一”,第二个元素被称为“第二”,并且顺序是固定的(第一,第二)。
- Pair 用于将类型可能不同的两个值组合在一起。 Pair 提供了一种将两个异构对象存储为一个单元的方法。
- 可以分配、复制和比较对。在 map 或 hash_map 中分配的对象数组默认为“pair”类型,其中所有“first”元素都是与其“second”值对象关联的唯一键。
要访问元素,我们使用变量名后跟点运算符,然后是关键字 first 或 second。
如何访问一对?
可以使用点 (.)运算符访问对的元素。
句法:
auto fistElement = myPair.first;
auto fistElement = myPair.second;
对多图
对的多重映射是一个多重映射,其中键或值本身就是一对。如果对的对应的第一个和第二个元素相等,则认为两个对是相等的。现在,如果需要以排序或特定顺序存储一对以上的副本以及其他元素,在这种情况下,多组对就派上用场了。
句法:
multimap
Here,
dataType1 and dataType2 can be similar or dissimilar data types.
示例 1:下面是 C++ 程序,用于演示对多映射的工作。
C++
// C++ program to demonstrate
// the working of a multimap of
// pairs.
#include
using namespace std;
// Function to print multimap elements
void print(multimap,
bool>& myContainer)
{
cout << "Key(pair of integers)" <<
" " <<
"Value(boolean)\n\n";
for (auto pr : myContainer)
{
pair myPair = pr.first;
// pr points to current pair of myContainer
cout << '[' << myPair.first << " , " <<
myPair.second << ']' <<
" " <<
pr.second << '\n';
}
}
// Driver code
int main()
{
// Declaring a multimap
// Key is of pair type
// Value is of bool type
multimap, bool> myContainer;
// Creating some pairs to be used
// as keys
pair pair1;
pair1 = make_pair(100, 200);
pair pair2;
pair2 = make_pair(200, 300);
pair pair3;
pair3 = make_pair(300, 400);
pair pair4;
pair4 = make_pair(100, 200);
// Since each element is a pair on
// its own in a multimap. So, we
// are inserting a pair
// Note that [] operator doesn't working
// in case of a multimap
myContainer.insert(pair,
bool>(pair1, true));
myContainer.insert(pair,
bool>(pair2, false));
myContainer.insert(pair,
bool>(pair3, true));
myContainer.insert(pair,
bool>(pair4, false));
// Calling print function
print(myContainer);
return 0;
}
C++
// C++ program to demonstrate
// the working of a multimap of
// pairs.
#include
using namespace std;
// Function to print multimap elements
void print(multimap,
bool>& myContainer)
{
cout << "Key(pair of integers)" <<
" " <<
"Value(boolean)\n\n";
for (auto pr : myContainer)
{
pair myPair = pr.first;
// pr points to current pair of myContainer
cout << '[' << myPair.first <<
" , " << myPair.second <<
']' << " " <<
" " <<
pr.second << '\n';
}
}
// Driver code
int main()
{
// Declaring a multimap
// Key is of pair type
// Value is of bool type
multimap, bool> myContainer;
// Creating some pairs to be used
// as keys
pair pair1;
pair1 = make_pair("GFG", 100);
pair pair2;
pair2 = make_pair("C++", 200);
pair pair3;
pair3 = make_pair("CSS", 300);
pair pair4;
pair4 = make_pair("GFG", 400);
// Since each element is a pair on its
// own in a multimap. So, we are
// inserting a pair
// Note that [] operator doesn't working
// in case of a multimap
myContainer.insert(pair,
bool>(pair1, true));
myContainer.insert(pair,
bool>(pair2, false));
myContainer.insert(pair,
bool>(pair3, true));
myContainer.insert(pair,
bool>(pair4, false));
// Calling print function
print(myContainer);
return 0;
}
Key(pair of integers) Value(boolean)
[100, 200] 1
[100, 200] 0
[200, 300] 0
[300, 400] 1
示例 2:下面是 C++ 程序,用于演示对多映射的工作。
C++
// C++ program to demonstrate
// the working of a multimap of
// pairs.
#include
using namespace std;
// Function to print multimap elements
void print(multimap,
bool>& myContainer)
{
cout << "Key(pair of integers)" <<
" " <<
"Value(boolean)\n\n";
for (auto pr : myContainer)
{
pair myPair = pr.first;
// pr points to current pair of myContainer
cout << '[' << myPair.first <<
" , " << myPair.second <<
']' << " " <<
" " <<
pr.second << '\n';
}
}
// Driver code
int main()
{
// Declaring a multimap
// Key is of pair type
// Value is of bool type
multimap, bool> myContainer;
// Creating some pairs to be used
// as keys
pair pair1;
pair1 = make_pair("GFG", 100);
pair pair2;
pair2 = make_pair("C++", 200);
pair pair3;
pair3 = make_pair("CSS", 300);
pair pair4;
pair4 = make_pair("GFG", 400);
// Since each element is a pair on its
// own in a multimap. So, we are
// inserting a pair
// Note that [] operator doesn't working
// in case of a multimap
myContainer.insert(pair,
bool>(pair1, true));
myContainer.insert(pair,
bool>(pair2, false));
myContainer.insert(pair,
bool>(pair3, true));
myContainer.insert(pair,
bool>(pair4, false));
// Calling print function
print(myContainer);
return 0;
}
Key(pair of integers) Value(boolean)
[C++, 200] 0
[CSS, 300] 1
[GFG, 100] 1
[GFG, 400] 0