C++中的向量Multiset及示例
什么是Multiset?
在C++中,Multiset是一种可以按照特定顺序承载多个元素的关联容器。与set不同,multiset可以承载同一元素的多个副本。
与Multiset相关的函数:
- begin() : 返回multiset中第一个元素的迭代器。
- end() : 返回迭代器,指向multiset中最后一个元素后面的理论元素。
- size() : 返回multiset中元素的数量。
- max_size() : 返回multiset可以承载的最大元素数量。
- empty() : 返回multiset是否为空。
什么是向量?
在C++中,向量与动态数组相同,具有在需要时调整大小的能力。向量只能包含同种类型的元素。简单来说,向量只能包含一种特定数据类型的元素,并且必须在声明向量时指定数据类型。
与向量相关的函数:
- begin() : 返回指向向量中第一个元素的迭代器。
- end() : 返回指向向量中最后一个元素后面的理论元素的迭代器。
- rbegin() : 返回一个反向迭代器,指向向量中的最后一个元素(倒序开头)。它从最后一个元素移动到第一个元素。
- rend() : 返回一个反向迭代器,指向向量中第一个元素之前的理论元素(视为反向结尾)。
- cbegin() : 返回指向向量中第一个元素的常量迭代器。
- cend() : 返回指向向量中最后一个元素后面的理论元素的常量迭代器。
- crbegin() : 返回一个指向向量中最后一个元素(倒序开头)的常数反向迭代器。它从最后一个元素移动到第一个元素。
- crend() : 返回一个指向向量中第一个元素之前的理论元素(视为反向结尾)的常数反向迭代器。
向量的Multiset
向量的Multiset是一种Multiset,其中每个元素本身是一个向量。如果两个向量的对应元素相等,则认为它们是相等的。Multiset可以包含多个相同的向量以及其他向量,这些向量都是按排序顺序排列的。
语法:
multiset <vector<dataType>> myMultiset;
在此处,
dataType: 一种数据类型。它表示存储在myMultiset中向量的值的类型。
示例1: 在下面的C++程序中创建了一个整数向量的Multiset。
// C++程序演示多重集合向量的工作
#include <bits/stdc++.h>
using namespace std;
// 迭代矢量元素的函数
void printVector(vector<int> myVector)
{
cout << "[ ";
for(auto element : myVector)
cout << element << ' ';
cout << "]\n";
}
// 迭代多重集合元素的函数
void print(multiset<vector<int>> &multisetOfVectors)
{
for (auto it = multisetOfVectors.begin();
it != multisetOfVectors.end();
it++)
{
// 每个元素都是一个向量
printVector(*it);
}
}
// 主函数
int main()
{
// 定义多重集合向量,向量类型为整数
multiset<vector<int>> multisetOfVectors;
// 初始化向量
vector<int> myVector1 {3, 6, 9, 10};
vector<int> myVector2 {5, 10, 11, 7};
vector<int> myVector3 {3, 6, 9, 10};
vector<int> myVector4 {5, 10, 15};
vector<int> myVector5 {50, 20, 30, 40};
// 将向量插入多重集合中
multisetOfVectors.insert(myVector1);
multisetOfVectors.insert(myVector2);
multisetOfVectors.insert(myVector3);
multisetOfVectors.insert(myVector4);
multisetOfVectors.insert(myVector5);
// 调用print函数
print(multisetOfVectors);
return 0;
}
输出:
[ 3 6 9 10 ]
[ 3 6 9 10 ]
[ 5 10 11 7 ]
[ 5 10 15 ]
[ 50 20 30 40 ]
解释:
在上面的输出中,“myVector1”和“myVector3”是相同的。这就是为什么可以在输出中看到两个相同的向量的原因。
示例2: 在下面的C++程序中,创建了一个多重集合向量的字符串。
// C++程序演示多重集合向量的工作
#include <bits/stdc++.h>
using namespace std;
// 迭代向量元素的函数
void printVector(vector<string> myVector)
{
cout << "[ ";
for(auto element : myVector)
cout << element << ' ';
cout << "]\n";
}
// 迭代多重集合元素的函数
void print(multiset<vector<string>> &multisetOfVectors)
{
for (auto it = multisetOfVectors.begin();
it != multisetOfVectors.end();
it++)
{
printVector(*it);
}
}
// 主函数
int main()
{
// 定义多重集合向量,向量类型为字符串
multiset<vector<string>> multisetOfVectors;
// 初始化向量
vector<string> myVector1
{"GeeksforGeeks", "GFG"};
vector<string> myVector2
{"Python", "Swift", "R"};
vector<string>myVector3
{"C", "C++"};
vector<string> myVector4
{"GeeksforGeeks", "GFG"};
vector<string> myVector5
{"PHP", "HTML"};
// 将向量插入多重集合中
multisetOfVectors.insert(myVector1);
multisetOfVectors.insert(myVector2);
multisetOfVectors.insert(myVector3);
multisetOfVectors.insert(myVector4);
multisetOfVectors.insert(myVector5);
// 调用print函数
print(multisetOfVectors);
return 0;
}
输出:
[ C C++ ]
[ GeeksforGeeks GFG ]
[ GeeksforGeeks GFG ]
[ PHP HTML ]
[ Python Swift R ]
解释:
在上面的输出中,“myVector1”和“myVector4”是相同的。这就是为什么可以在输出中看到两个相同的向量的原因。