Mẫu lớp std::multiset
có thông số mẫu đầu tiên chỉ định loại đối tượng được lưu trữ trong bộ và thứ hai chỉ định loại của hàm so sánh. Chúng tôi có thể bỏ qua tham số mẫu thứ ba ngay bây giờ.
Tham số thứ hai, tùy chọn, B
, phải triển khai strict weak ordering và được sử dụng để đặt hàng bộ/nhiều. Yêu cầu này được yêu cầu để đảm bảo sự phức tạp lôgarit của các hoạt động tra cứu phần tử. Dưới đây là một ví dụ:
struct A
{
int x;
};
struct B
{
bool operator()(const A& lhs, const A& rhs) const {
return lhs.x < rhs.x;
}
};
Lớp này B
có operator()
, có nghĩa là nó có thể được gọi là, ví dụ
B comp;
A a1, a2;
bool a1lessThana2 = comp(a1, a2);
này là cần thiết cho các thiết lập/MultiSet để đặt yếu tố trong đúng vị trí, và tìm ra nếu hai yếu tố là như nhau. Nếu có một loại operator<
cho loại của bạn, thông số mẫu thứ hai có thể được bỏ qua.
bool operator<(constA& lhs, const A& rhs) { return lhs.x < rhs.x; }
Đây là một ví dụ về việc sử dụng:
int main()
{
std::multiset<A, B> m;
A a1, a2;
a1.x = 23;
a2.x = 100;
m.insert(a1);
m.insert(a2);
}
'std :: multiset' là một mẫu chuẩn từ gần đây C++ (đặc biệt là năm 2011 tiêu chuẩn) thư viện. Bạn có quen thuộc với các mẫu C++ nói chung không? Bạn có hiểu 'std :: vector' và' std :: map' đã ?? –
http://www.sgi.com/tech/stl/multiset.html – DumbCoder
@BasileStarynkevitch Trên thực tế 'std :: multiset' đã tồn tại trong C++ 98, trong khi nhận xét của bạn có vẻ như đó là tính năng C++ 11 (hoặc tôi chỉ hiểu lầm bình luận của bạn). –