C++ 中的列表和转发列表的集合以及示例
套
集合是一种关联容器,其中每个元素都必须是唯一的,因为元素的值标识了它。元素的值一旦添加到集合中就不能修改,尽管可以删除和添加该元素的修改值。
与集合一起使用的函数:
- begin():返回指向集合中第一个元素的迭代器。
- end() :返回一个迭代器,指向集合中最后一个元素之后的理论元素。
- size() :返回集合中元素的数量。
- max_size() :返回集合可以容纳的最大元素数。
- empty() :返回集合是否为空。
列表
列表是允许非连续内存分配的序列容器。与向量相比,列表的遍历速度较慢,但一旦找到位置,插入和删除都很快。通常,当我们说 List 时,我们谈论的是双向链表。为了实现单链表,我们使用前向列表。
与列表一起使用的函数:
- push_front():此函数用于将元素从前面推送到列表中。
- push_back():该函数用于将元素从后面推入列表。
转发列表
STL中的前向列表实现了单链表。从 C++11 引入,前向列表在插入、删除和移动操作(如排序)方面比其他容器更有用,并且允许时间常数插入和删除元素。
与转发列表一起使用的函数:
- push_front():此函数用于将元素从前面推送到 Forward 列表中。
STL 中的列表集
一组列表在设计复杂的数据结构时非常有用。
句法:
set> set_of_list: This stores lists.
set> set_of_forward_list: This stores forward lists.
下面是演示列表集实现的 C++ 程序:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to print set contents
void print(set >& setOfList)
{
for (auto x : setOfList) {
// Each element of the set is
// a list itself
list li = x;
// Printing list elements
cout << "[ ";
for (auto element : li)
cout << element << ' ';
cout << ']';
cout << '\n';
}
}
// Driver code
int main()
{
set > setOfList;
// Declaring a list
list list1;
// Pushing elements in the list
// Pushing at the back
list1.push_back(10);
list1.push_back(12);
// Pushing at the front
list1.push_front(21);
// Pushing at the back
list1.push_back(16);
// Inserting a list into the set
setOfList.insert(list1);
// Declaring another list
list list2;
// Pushing elements in the list
// Pushing at the back
list2.push_back(6);
list2.push_back(9);
list2.push_back(11);
// Pushing at the front
list2.push_front(2);
setOfList.insert(list2);
// Declaring another list
list list3;
// Pushing elements in the list
// Pushing at the back
list3.push_back(2);
list3.push_back(6);
list3.push_back(9);
list3.push_back(1);
setOfList.insert(list3);
print(setOfList);
return 0;
}
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to print set contents
void print(set >& setOfForwardList)
{
for (auto x : setOfForwardList) {
// Each element is a forward list
// itself
forward_list li = x;
cout << "[ ";
for (auto element : li)
cout << element << ' ';
cout << ']';
cout << '\n';
}
}
// Driver code
int main()
{
// Declaring a setOfForwardList
set > setOfForwardList;
// Declaring a forward list
forward_list forwardList1;
// Pushing elements in the forward
// list
forwardList1.push_front(10);
forwardList1.push_front(12);
forwardList1.push_front(21);
forwardList1.push_front(16);
// Inserting forward list into
// the set
setOfForwardList.insert(forwardList1);
// Declaring another forward list
forward_list forwardList2;
// Pushing elements in the forward
// list
forwardList2.push_front(6);
forwardList2.push_front(9);
forwardList2.push_front(11);
forwardList2.push_front(2);
// Inserting forward list into
// the set
setOfForwardList.insert(forwardList2);
// Print set contents
print(setOfForwardList);
return 0;
}
输出
[ 2 6 9 1 ]
[ 2 6 9 11 ]
[ 21 10 12 16 ]
下面是演示前向列表集实现的 C++ 程序:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to print set contents
void print(set >& setOfForwardList)
{
for (auto x : setOfForwardList) {
// Each element is a forward list
// itself
forward_list li = x;
cout << "[ ";
for (auto element : li)
cout << element << ' ';
cout << ']';
cout << '\n';
}
}
// Driver code
int main()
{
// Declaring a setOfForwardList
set > setOfForwardList;
// Declaring a forward list
forward_list forwardList1;
// Pushing elements in the forward
// list
forwardList1.push_front(10);
forwardList1.push_front(12);
forwardList1.push_front(21);
forwardList1.push_front(16);
// Inserting forward list into
// the set
setOfForwardList.insert(forwardList1);
// Declaring another forward list
forward_list forwardList2;
// Pushing elements in the forward
// list
forwardList2.push_front(6);
forwardList2.push_front(9);
forwardList2.push_front(11);
forwardList2.push_front(2);
// Inserting forward list into
// the set
setOfForwardList.insert(forwardList2);
// Print set contents
print(setOfForwardList);
return 0;
}
输出
[ 2 11 9 6 ]
[ 16 21 12 10 ]
默认情况下,列表在集合中以非降序排列,并遵循集合中的逻辑,如果两个列表的第一个值相等,则比较列表的第二个值,依此类推。