21xrx.com
2024-12-23 00:48:17 Monday
登录
文章检索 我的文章 写文章
C++中如何实现不重复的容器?
2023-06-28 11:43:24 深夜i     --     --
C++ 容器 不重复

在编程中,使用容器是十分常见的。C++也提供了一系列的容器来满足不同的需求。然而,有时候我们需要保证容器中的元素不重复,这时候该怎样实现呢?

C++中提供了两种主要的不重复容器类型:set和map。

set是一种集合容器,其中的元素是唯一的且按一定的顺序排列的。set的底层实现是红黑树,因此其插入和查找操作的时间复杂度为O(log n)。下面是如何定义和使用set:


#include <set>

#include <iostream>

using namespace std;

int main(){

  set<int> my_set;

  my_set.insert(3);

  my_set.insert(1);

  my_set.insert(2);

  bool is_in = my_set.count(2); // 判断2是否在my_set中

  cout << is_in << endl;

  for (int i : my_set)

    cout << i << " ";

  

  cout << endl;

  return 0;

}

上述代码定义了一个int类型的set,并向其中插入了3、1、2三个数。使用set的count方法可以判断某个值是否在set中。最后,遍历set可以得到排序后的元素序列。

除了set,C++中的map也是一种常用的容器类型。map基本上是一种键值对集合,其中键是唯一的,而值可以重复。和set类似,map的底层实现也是红黑树。下面展示如何使用map:


#include <map>

#include <iostream>

using namespace std;

int main(){

  map<string, int> my_map;

  my_map["apple"] = 1;

  my_map["banana"] = 2;

  my_map["orange"] = 3;

  bool is_in = my_map.count("banana"); // 判断"banana"是否在my_map的键中

  cout << is_in << endl;

  cout << my_map["apple"] << endl; // 访问键"apple"对应的值

  for (auto i : my_map)

    cout << i.first << " : " << i.second << endl;

  

  return 0;

}

上述代码和set的使用类似,定义了一个string类型到int类型的映射表,并向其中插入了三个键值对。使用count方法可以判断某个键是否在map中,也可以使用方括号操作符访问某个键对应的值。最后,遍历map可以得到以键为关键字,值为对应元素的键值对序列。

综上所述,C++中可以使用set和map两种容器来实现不重复容器。set的元素是唯一的且按顺序排列,而map可以实现键到值的映射,并保证键的唯一性。使用这两种容器可以帮助我们更轻松地处理不重复元素相关的问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复