在C++中使用示例的元组的Multiset
在C++中,multiset是一个能够存储任意多个相同值的Container。Multiset可以用于存储元组(tuple),其中每个元组都有不同的排序方式。Multiset可以使用默认排序方式和自定义排序方式来实现。
默认排序方式
Multiset使用默认的小于操作符(less than operator, <)来对元素排序,默认情况下使用std::less模板。使用示例如下:
#include <iostream>
#include <set>
#include <tuple>
using namespace std;
int main() {
multiset<tuple<int, int, char>> myMultiset;
myMultiset.insert(tuple<int, int, char>{1, 2, 'a'});
myMultiset.insert(tuple<int, int, char>{1, 3, 'b'});
myMultiset.insert(tuple<int, int, char>{2, 3, 'c'});
for (const auto &x : myMultiset) {
cout << "(" << get<0>(x) << ", " << get<1>(x) << ", " << get<2>(x) << ") ";
}
return 0;
}
输出结果为:(1, 2, a) (1, 3, b) (2, 3, c)
自定义排序方式
除了默认排序方式,Multiset还可以根据自定义的规则排序。例如,如果我们想要按照元组的第二个元素排序,示例代码如下:
#include <iostream>
#include <set>
#include <tuple>
using namespace std;
struct CompareBySecondElement {
bool operator() (const tuple<int, int, char>& lhs, const tuple<int, int, char>& rhs) const {
return get<1>(lhs) < get<1>(rhs);
}
};
int main() {
multiset<tuple<int, int, char>, CompareBySecondElement> myMultiset;
myMultiset.insert(make_tuple(1, 2, 'a'));
myMultiset.insert(make_tuple(1, 3, 'b'));
myMultiset.insert(make_tuple(2, 3, 'c'));
for (const auto &x : myMultiset) {
cout << "(" << get<0>(x) << ", " << get<1>(x) << ", " << get<2>(x) << ") ";
}
return 0;
}
输出结果为:(1, 2, a) (2, 3, c) (1, 3, b)
Multiset的其他成员函数
Multiset是一个STL容器,具有许多成员函数用于操作元素。以下是一些常用的成员函数:
insert()
: 插入一个元素。erase()
: 删除一个元素。find()
: 查找元素。count()
: 统计元素出现次数。size()
: 返回容器大小。empty()
: 返回容器是否为空。begin()
: 返回指向第一个元素的迭代器。end()
: 返回指向最后一个元素之后的迭代器。
例如,我们可以使用find()函数查找Multiset中是否有某个元素:
#include <iostream>
#include <set>
#include <tuple>
using namespace std;
struct CompareBySecondElement {
bool operator() (const tuple<int, int, char>& lhs, const tuple<int, int, char>& rhs) const {
return get<1>(lhs) < get<1>(rhs);
}
};
int main() {
multiset<tuple<int, int, char>, CompareBySecondElement> myMultiset;
myMultiset.insert(make_tuple(1, 2, 'a'));
myMultiset.insert(make_tuple(1, 3, 'b'));
myMultiset.insert(make_tuple(2, 3, 'c'));
auto it = myMultiset.find(make_tuple(1, 3, 'b'));
if (it != myMultiset.end()) {
cout << "Found! " << endl;
} else {
cout << "Not found!" << endl;
}
return 0;
}
输出结果为:Found!
结论
Multiset是一个非常有用的STL容器,特别适用于存储元组,并且可以根据默认或自定义的排序方式进行排序。此外,Multiset还具有许多常用的成员函数,如插入、删除、查找元素等。在实际编程中,我们可以根据具体的需求选择使用Multiset或其他STL容器来存储数据。