std::unordered_multiset

容器库(12)-std::unordered_multiset unordered_multiset是以key为元素无序的关联容器,搜索、移除和插入操作是平均常数的时间复杂度。unordered_multiset在内部没有按任何顺序排列,而是放在桶当中的,放进哪个桶是通过计算key的hash值来决定的。和unordered_set不同的是,unordered_multiset中的key值可以重复。 阅读详情

std::unordered_multiset

介绍

成员函数

非成员函数

介绍

// unordered_multiset 模板定义
template<
    class Key,
    class Hash = std::hash<Key>,
    class KeyEqual = std::equal_to<Key>,
    class Allocator = std::allocator<Key>> class unordered_multiset;
namespace pmr {
    template <class Key,
              class Hash = std::hash<Key>,
              class Pred = std::equal_to<Key>>
    using unordered_multiset = std::unordered_multiset<Key, Hash, Pred, std::pmr::polymorphic_allocator<Key>>
}
  • std::unordered_multiset 介绍摘选自 cppreference.com 中文网 std::unordered_multiset 介绍
  • unordered_multiset 是关联容器,含有可能非唯一 Key 类型对象的集合。搜索、插入和移除拥有平均常数时间复杂度
  • 元素在内部并不以任何顺序排序,只是被组织到桶中。元素被放入哪个桶完全依赖其值的哈希
  • 这允许快速访问单独的元素,因为一旦计算哈希,它就指代放置该元素的准确的桶
  • 不要求此容器的迭代顺序稳定(故例如 std::equal 不能用于比较二个 std::unordered_multiset )
  • 了关键比较等价(以 key_eq() 为比较器比较相等)的每组元素组成迭代顺序中的相接子范围,它可用 equal_range() 访问
  • unordered_multiset可以存储多个相同的数值,unordered_set只能存储一个相同的数值
  • 无序容器,值存储的位置可能会变化,所以直接访问元素

成员函数

构造析构
#include <QCoreApplication>
#include <algorithm>
#include <iostream>
#include <string>
#include <unordered_set>

auto Print(const std::string &msg,
           const std::unordered_multiset<int, std::hash<int>, std::less<int>,
                                         std::allocator<int>> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

auto Print(const std::string &msg, const std::unordered_multiset<int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1; //默认构造
  Print("s1", s1);

  uset_int s2(10); //设置桶数量
  Print("s2", s2);
  uset_int s3(10, std::hash<int>()); //设置桶数量,哈希散列
  Print("s3", s3);
  std::unordered_multiset<int, std::hash<int>, std::less<int>> s4(
      10, std::hash<int>(), std::less<int>{}); //设置桶数量,哈希散列,比较器
  Print("s4", s4);

  std::unordered_multiset<int, std::hash<int>, std::less<int>,
                          std::allocator<int>>
      s5(10, std::hash<int>(), std::less<int>(),
         std::allocator<int>()); //设置桶数量,哈希散列,比较器,分配器
  Print("s5", s5);

  uset_int s6(10, std::allocator<int>()); //设置桶数量,分配器
  Print("s6", s6);

  uset_int s7{1, 2, 3, 4, 5, 6, 5}; //初始化列表
  Print("s7", s7);

  uset_int s8(s7.begin(), s7.end()); //迭代器初始化
  Print("s8", s8);

  uset_int s9(s8); //拷贝构造
  Print("s9", s9);
  uset_int s10(s9, std::allocator<int>());
  Print("s10", s10);

  uset_int s11(std::move(s10)); //移动构造
  Print("s11", s11);
  uset_int s12(std::move(s11), std::allocator<int>());
  Print("s12", s12);

  //析构函数默认
  return 0; // a.exec();
}

输出结果:
s1 :
s2 :
s3 :
s4 :
s5 :
s6 :
s7 : 1 2 3 4 5 5 6
s8 : 1 2 3 4 5 5 6
s9 : 1 2 3 4 5 5 6
s10 : 1 2 3 4 5 5 6
s11 : 1 2 3 4 5 5 6
s12 : 1 2 3 4 5 5 6

元素访问
int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1{1, 2, 3, 4, 5, 6, 5};
  std::cout << "s1 : ";
  for (const auto &val : s1) {
    std::cout << val << "\t";
  }
  std::cout << "\n";
  return 0; // a.exec();
}

输出结果:
s1 : 1 2 3 4 5 5 6

迭代器
int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1{1, 2, 3, 4, 5, 6, 5};
  uset_int::iterator iter = s1.begin();
  std::cout << "s1 : ";
  for (; iter != s1.end(); ++iter) {
    std::cout << *iter << "\t";
  }
  std::cout << "\n";

  uset_int::const_iterator citer = s1.cbegin();
  std::cout << "s1 : ";
  for (; citer != s1.cend(); ++citer) {
    std::cout << *citer << "\t";
  }
  std::cout << "\n";
  return 0; // a.exec();
}

输出结果:
s1 : 1 2 3 4 5 5 6
s1 : 1 2 3 4 5 5 6

容量
auto Print(const std::string &msg, const std::unordered_multiset<int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1{1, 2, 3, 4, 5, 6, 5};
  Print("s1", s1);

  //检查容器是否为空
  std::cout << std::boolalpha << "s1.empty() : " << s1.empty() << std::endl;

  std::cout << "s1.size() : " << s1.size() << std::endl; //返回容纳的元素数
  std::cout << "s1.max_size() : " << s1.max_size()
            << std::endl; //返回可容纳的最大元素数,和平台有关
  return 0;               // a.exec();
}

输出结果:
s1 : 1 2 3 4 5 5 6
s1.empty() : false
s1.size() : 7
s1.max_size() : 768614336404564650

修改器
auto Print(const std::string &msg, const std::unordered_multiset<int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1{1, 2, 3, 4, 5, 6, 5};
  Print("s1", s1);

  s1.clear(); //  清除内容
  Print("s1", s1);
  s1.insert(20); //插入元素或结点
  Print("s1", s1);
  s1.emplace(30); //原位构造元素
  Print("s1", s1);

  s1.emplace_hint(s1.end(), 40); //使用提示原位构造元素
  Print("s1", s1);

  s1.erase(s1.begin()); //擦除元素
  Print("s1", s1);

  uset_int s2;
  s2.swap(s1);
  Print("s1", s1);
  Print("s2", s2);
  return 0; // a.exec();
}

输出结果:
s1 : 1 2 3 4 5 5 6
s1 :
s1 : 20
s1 : 20 30
s1 : 20 30 40
s1 : 30 40
s1 :
s2 : 30 40

查找
auto Print(const std::string &msg, const std::unordered_multiset<int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1{1, 2, 3, 4, 5, 6, 5, 6};
  Print("s1", s1);

  // 返回匹配特定键的元素数量
  std::cout << "s1.count(1) : " << s1.count(1) << std::endl;
  std::cout << "s1.count(5) : " << s1.count(5) << std::endl;
  std::cout << "s1.count(6) : " << s1.count(6) << std::endl;

  // 寻找带有特定键的元素,返回 key 对应的任意一个值的迭代器
  uset_int::const_iterator iter = s1.find(5);
  if (iter != s1.cend()) {
    std::cout << "s1.find(5) : " << *iter << std::endl;
  } else {
    std::cout << "s1.find(5) : s1.cend()" << std::endl;
  }

  // 返回容器中所有键等于 key 的元素范围
  // 返回容器中所有键等于 key
  // 的元素范围。范围以二个迭代器定义,第一个指向所需范围的首元素,而第二个指向范围的尾后一位元素。
  // 返回含有容器中所有键等价于 x 的元素的范围。此重载只有在有限定标识
  // Hash::is_transparent 与 KeyEqual::is_transparent
  // 均合法并指代类型时才参与重载决议。这假设能用 K 和 Key 类型一起调用这种 Hash
  // 还有 KeyEqual 是通透的,进而允许不用构造 Key 的实例就调用此函数
  std::pair<uset_int::iterator, uset_int::iterator> pa = s1.equal_range(5);
  if (pa.first == s1.end())
    std::cout << "pa.first is empty" << std::endl;
  else
    std::cout << "s1.equal_range(5) first : " << *pa.first << std::endl;
  if (pa.second == s1.end())
    std::cout << "pa.second is empty" << std::endl;
  else
    std::cout << "s1.equal_range(5) second : " << *pa.second << std::endl;
  return 0; // a.exec();
}

输出结果:
s1 : 1 2 3 4 5 5 6 6
s1.count(1) : 1
s1.count(5) : 2
s1.count(6) : 2
s1.find(5) : 5
s1.equal_range(5) first : 5
s1.equal_range(5) second : 6

非成员函数

auto Print(const std::string &msg, const std::unordered_multiset<int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1{1, 2, 3, 4, 5, 6, 5};
  uset_int s2{1, 2, 3, 4, 5, 6, 5};
  Print("s1", s1);
  Print("s2", s2);

  std::cout << std::boolalpha << "s1 == s2 : " << (s1 == s2) << std::endl;

  uset_int s3;
  std::swap(s3, s2);
  Print("s2", s2);
  Print("s3", s3);
  return 0; // a.exec();
}

输出结果:
s1 : 1 2 3 4 5 5 6
s2 : 1 2 3 4 5 5 6
s1 == s2 : true
s2 :
s3 : 1 2 3 4 5 5 6

桶接口
auto Print(const std::string &msg, const std::unordered_multiset<int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1;
  s1.emplace(20);
  s1.emplace(5);
  s1.emplace(66);
  s1.emplace(99);
  s1.emplace(66);
  s1.emplace(100);
  Print("s1", s1);

  //返回一个迭代器,指向指定的桶的开始
  for (int i = 0; i < s1.bucket_count(); ++i) {
    auto iter = s1.begin(i);
    if (iter == s1.end(i)) {
      std::cout << "s1.end(" << i << ")"
                << "\t";
    } else {
      for (; iter != s1.end(i); ++iter) {
        std::cout << "s1.begin(" << i << ") : " << *iter << "\t";
      }
    }
  }
  std::cout << "\n";

  //返回一个迭代器,指向指定的桶的开始
  for (int i = 0; i < s1.bucket_count(); ++i) {
    auto iter = s1.cbegin(i);
    if (iter == s1.cend(i)) {
      std::cout << "s1.cend(" << i << ")"
                << "\t";
    } else {
      for (; iter != s1.cend(i); ++iter) {
        std::cout << "s1.cbegin(" << i << ") : " << *iter << "\t";
      }
    }
  }
  std::cout << "\n";

  //返回桶数
  std::cout << "s1.bucket_count() : " << s1.bucket_count() << std::endl;
  //返回桶的最大数量
  std::cout << "s1.max_bucket_count() : " << s1.max_bucket_count() << std::endl;
  //返回在特定的桶中的元素数量
  for (int i = 0; i < s1.bucket_count(); ++i) {
    std::cout << "s1.bucket_size(" << i << ") : " << s1.bucket_size(i) << "\t";
  }
  std::cout << "\n";

  //返回带有特定键的桶,返回关键 key 的桶的下标。始终会在此桶中找到关键等于 key
  //的元素(若存在)。返回值仅对 bucket_count() 返回相同值的容器实例合法。
  //若 bucket_count() 为零则行为未定义
  std::cout << "s1.bucket(1) : " << s1.bucket(1) << std::endl;
  std::cout << "s1.bucket(100) : " << s1.bucket(100) << std::endl;

  // 键不存在,若存在会分配当前下标的桶
  std::cout << "s1.bucket(5000) : " << s1.bucket(5000) << std::endl;
  std::cout << "s1.bucket(2) : " << s1.bucket(2) << std::endl;
  return 0; // a.exec();
}

输出结果:
s1 : 100 20 5 66 66 99
s1.begin(0) : 5 s1.begin(1) : 100 s1.begin(1) : 20 s1.end(2) s1.end(3) s1.end(4) s1.end(5) s1.begin(6) : 99 s1.begin(7) : 66 s1.begin(7) : 66
s1.cbegin(0) : 5 s1.cbegin(1) : 100 s1.cbegin(1) : 20 s1.cend(2) s1.cend(3) s1.cend(4) s1.cend(5) s1.cbegin(6) : 99 s1.cbegin(7) : 66 s1.cbegin(7) : 66
s1.bucket_count() : 8
s1.max_bucket_count() : 1152921504606846975
s1.bucket_size(0) : 1 s1.bucket_size(1) : 2 s1.bucket_size(2) : 0 s1.bucket_size(3) : 0 s1.bucket_size(4) : 0 s1.bucket_size(5) : 0 s1.bucket_size(6) : 1 s1.bucket_size(7) : 2
s1.bucket(1) : 4
s1.bucket(100) : 1
s1.bucket(5000) : 4
s1.bucket(2) : 7

哈希策略
auto Print(const std::string &msg, const std::unordered_multiset<int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using uset_int = std::unordered_multiset<int>;
  uset_int s1;
  s1.emplace(20);
  s1.emplace(5);
  s1.emplace(66);
  s1.emplace(99);
  s1.emplace(66);
  s1.emplace(100);
  Print("s1", s1);

  for (int i = 0; i < s1.bucket_count(); ++i) {
    auto iter = s1.begin(i);
    if (iter == s1.end(i)) {
      std::cout << "s1.end(" << i << ")"
                << "\t";
    } else {
      for (; iter != s1.end(i); ++iter) {
        std::cout << "s1.begin(" << i << ") : " << *iter << "\t";
      }
    }
  }
  std::cout << "\n";

  //返回每个桶的平均元素数量
  std::cout << "s1.load_factor() : " << s1.load_factor() << std::endl;

  for (int i = 0; i < s1.bucket_count(); ++i) {
  }

  //管理每个桶的平均元素数量的最大值
  //管理最大加载因子(每个桶的平均元素数)。若加载因子超出此阈值,则容器自动增加桶数
  //返回最大加载因子
  std::cout << "s1.max_load_factor() : " << s1.max_load_factor() << std::endl;
  //设置最大加载因子
  s1.max_load_factor(0.9);
  std::cout << "s1.max_load_factor() : " << s1.max_load_factor() << std::endl;

  //为至少为指定数量的桶预留存储空间并重新生成散列表
  s1.rehash(16);
  for (int i = 0; i < s1.bucket_count(); ++i) {
    auto iter = s1.begin(i);
    if (iter == s1.end(i)) {
      std::cout << "s1.end(" << i << ")"
                << "\t";
    } else {
      for (; iter != s1.end(i); ++iter) {
        std::cout << "s1.begin(" << i << ") : " << *iter << "\t";
      }
    }
  }
  std::cout << "\n";

  //为至少为指定数量的元素预留存储空间并重新生成哈希表
  s1.reserve(20);
  for (int i = 0; i < s1.bucket_count(); ++i) {
    auto iter = s1.begin(i);
    if (iter == s1.end(i)) {
      std::cout << "s1.end(" << i << ")"
                << "\t";
    } else {
      for (; iter != s1.end(i); ++iter) {
        std::cout << "s1.begin(" << i << ") : " << *iter << "\t";
      }
    }
  }
  std::cout << "\n";
  return 0; // a.exec();
}

输出结果:
s1 : 100 20 5 66 66 99
s1.begin(0) : 5 s1.begin(1) : 100 s1.begin(1) : 20 s1.end(2) s1.end(3) s1.end(4) s1.end(5) s1.begin(6) : 99 s1.begin(7) : 66 s1.begin(7) : 66
s1.load_factor() : 0.75
s1.max_load_factor() : 1
s1.max_load_factor() : 0.9
s1.begin(0) : 5 s1.begin(1) : 20 s1.begin(1) : 100 s1.end(2) s1.end(3) s1.end(4) s1.end(5) s1.begin(6) : 99 s1.begin(7) : 66 s1.begin(7) : 66 s1.end(8) s1.end(9) s1.end(10) s1.end(11) s1.end(12) s1.end(13) s1.end(14) s1.end(15)
s1.begin(0) : 5 s1.begin(1) : 20 s1.end(2) s1.end(3) s1.end(4) s1.end(5) s1.begin(6) : 99 s1.end(7) s1.end(8) s1.end(9) s1.end(10) s1.end(11) s1.end(12) s1.end(13) s1.end(14) s1.end(15) s1.end(16) s1.begin(17) : 100 s1.end(18) s1.end(19) s1.end(20) s1.end(21) s1.end(22) s1.begin(23) : 66 s1.begin(23) : 66 s1.end(24) s1.end(25) s1.end(26) s1.end(27) s1.end(28) s1.end(29) s1.end(30) s1.end(31)

起始

C++中的无序多重集合(`unordered_multiset`)详解与示例代码 无序多重集合()提供了一种存储多个相同键值的数据结构,它在插入、删除和查找操作方面具有快速的性能。使用无序多重集合,我们可以轻松地处理需要统计频率或计数的问题。本文通过示例代码演示了无序多重集合的基本用法,希望能够帮助你更好地理解和应用该容器。 阅读详情

相关推荐

第四十四节 C++ STL(标准模板库)-集合类std::set std::multiset std::unordered_set std::unordered_multiset

集合用途:用于频繁而快速的搜索,存入集合的内容会进行排序,所以查找速度快,复杂度为对数std::set:存储的元素唯一, 不重复,默认我从小到大的排序std::multiset:存储的元素可重复,默认我从小到大的排序std::unordered_set:散列集合,使用散列函数计算唯一索引,并根据索引决定将元素放入哪个bucket(桶),#include &lt;iostream&gt; #...

菜鸟博客 853

STL无序容器之unordered_set和unordered_multiset

参考链接 unordered_set unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。 unordered_set 容器具有以下几个特性: 不再以键值对的形式存储数据,而是直接存储数据的值; 容器内部存储的各个元素的值都互不相等,且不能被修改。 不会对内部存储的数据进行排序(这和该容器底层采用哈希表结构存储数据有关) 实现 unordered_set 容器的模板类定义在<unordered_s

AndyJ的学习之旅 2205

C++ std::unordered_multiset详解

头文件元素特性: 元素可重复,无序存储时间复杂度: 平均 O(1) 的插入、删除和查找底层实现: 哈希表与 unordered_set 的区别: 允许重复元素public:int age;// 必须定义相等运算符// 自定义哈希函数// 重复元素,允许插入// 再次插入相同元素// 遍历所有 Person是一个允许重复元素的无序集合容器,适用于以下场景:需要快速插入、删除和查找不关心元素顺序需要存储重复元素需要统计元素出现次数。

浩瀚之水的专栏 578

C++之STL的unordered_multiset容器

unordered_multiset是一个集合容器,是基于哈希表实现的,元素不是唯一的,也不是有序的,也就是无序的。

m0_47428520的博客 657

告别手动打点计时:用Lauterbach TRACE32的RunTime功能,5分钟搞定嵌入式代码段性能分析

本文深入解析了Lauterbach TRACE32的RunTime功能在嵌入式代码性能分析中的革命性应用。通过硬件级计时原理和非侵入式设计,该功能能快速精确测量代码执行时间,显著提升开发效率,特别适用于汽车电子和工业控制领域。文章还提供了从基础设置到高级分析的完整实战指南,帮助工程师轻松掌握这一强大工具。

weixin_30615767的博客 279

Stata: 空间面板数据模型及Stata实现

  作者:游万海 (福州大学) Stata 连享会: 知乎 | 简书 | 码云 | 优快云   来源:Golgher 和 Voss (2016)   1. 背景介绍 由于面板数据模型所具有的众多优点 (刻画个体异质性,减弱模型共线性和增加自由度等),其被广泛应用于实证计量中。在 「 Stata: 面板数据模型-一文读懂」 文中,我们已对面板数据模型进行了介绍。 然而,当研究样本涉及到多个...

Stata连享会 7万+

C++ STL容器之unordered_multiset

C++ unordered_multiset 容器 定义于头文件 <unordered_set>之中,申明为: template< class Key, class Hash = std::hash<Key>, class KeyEqual = std::equal_to<Key>, class Allocator = std::a...

hestyle的博客 4671

电源完整性之仿真设计原理

电源完整性(Power Integrity),简称为PI,也就是大家平常听说的PI。PCB板上的电源设计也是非常重要的,不当的设计也会引起很重要的影响。所以电源完整性PI和信号完整性SI,是我们互连设计人员应该同等重视的问题。今天整理本人接触的电源完整性PI的一些原理,从不的角度去看PI,会有不同的理解,下面开始喽!!! 提到互连的电源设计,可能首先想到的电源分配网络(Power Distribution Nets),因为互连电源会有许多种,直流DC和交流AC,还有不同的电压调节模块(VRM)与不同的负载端

刘小同学的博客 7373

c++ std::unordered_set、std::unordered_map、std::unordered_multiset、std::unordered_multimap使用笔记

是 C++ 标准库中的无序关联容器,基于哈希表实现。它们提供了快速的查找、插入和删除操作。这些容器在需要高效查找、插入和删除操作的场景中非常有用,尤其是在元素顺序不重要的情况下。

曾经也曾立志 772

新手必看:瑞萨MCU选型时,QFP、QFN、BGA这些封装到底该怎么选?(附选型避坑指南)

本文详细解析了瑞萨MCU选型中QFP、QFN、BGA等封装的特点与适用场景,提供实战避坑指南。通过对比封装的空间占用、散热能力、焊接难度等核心维度,帮助工程师根据具体需求选择最合适的芯片封装,避免因选型不当导致的高成本与生产问题。

weixin_26965807的博客 421

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一)

阿里云推出国内首个集成“快思考”与“慢思考”能力的 Qwen3-8B 大语言模型,以80亿参数和 128K 上下文支持,重塑AI应用边界并助力开发者高效部署

以微薄之力,予他人些许温暖. 2万+

C++ 第四阶段 STL 容器 - 第六讲:详解 std::multiset 与 std::unordered_multiset

文章详细介绍了它们各自的核心特性、常用操作、自定义比较/哈希函数的方法,并通过性能对比表(有序容器查找O(logn) vs 无序容器平均O(1))说明适用场景。针对常见问题提供了解决方案,如multiset元素修改策略和unordered_multiset的rehash处理。最后列举了词频统计、评分系统等典型应用场景,帮助开发者根据有序性需求和性能要求选择合适的容器。

弘羽 1009

Qt C++ 串口调试助手

1. **串口配置**:支持自动检测可用串口,可配置波特率(9600~921600)、数据位(5~8)、校验位(无/奇/偶/标记/空格)、停止位(1/1.5/2)。- HEX 模式发送时,输入格式需为十六进制字符(0-9、A-F),可带空格(如 `01 A3 FF`)或不带空格(如 `01A3FF`)。// 发送模式:true=HEX,false=ASCII。// 字符串转HEX字节数组。ui->parity->addItems({"无", "奇校验", "偶校验", "标记校验", "空格校验"});

寒寒豆豆软件公司的博客 147

std::set、std::multiset 和 std::unordered_set的异同

std::set和都是 C++ 标准库中用于存储元素的容器,但它们在元素唯一性有序性底层实现和性能特性上有显著差异。容器底层实现有序性元素唯一性插入 / 删除 / 查找复杂度头文件典型用途std::set平衡二叉搜索树(红黑树)有序(默认升序)唯一O(log n)<set>有序去重场景(如排序后的唯一值)平衡二叉搜索树(红黑树)有序(默认升序)允许重复O(log n)<set>有序允许重复场景(如统计频率前的排序)哈希表(链地址法)无序唯一平均 O (1),最坏 O (n)

红军不怕远征难,万水千山只等闲 1373

2026最新华为OD机试新系统机考真题- 真题题库目录|全覆盖题库 + 逐点算法考点详解

2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸!

算法大师! 2614

GEE APP:基于Sentinel-2遥感影像的植被指数(NDVI)和水体指数(NDWI)可视化应用

本文介绍了利用Google Earth Engine(GEE)平台处理Sentinel-2卫星数据的方法,重点讲解NDVI(归一化植被指数)和NDWI(归一化水体指数)的计算与应用。内容包括环境准备、数据加载与处理、指数计算原理、可视化方法以及实际应用案例。教程详细展示了如何定义研究区域、加载影像数据、进行指数运算,并生成专业统计报告和图例。文章还提供了常见问题解答和最佳实践建议,为生态环境监测、农业评估和水资源管理等场景提供了实用工具。通过JavaScript代码示例,读者可以快速掌握GEE平台的遥感影像

此星光明博客 273

【C++ STL】std::unordered_multiset

std::unordered_multiset容器介绍

AmiaYukiAchami的博客 221

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

c++11 标准模板(STL)(std::unordered_multiset)(十三)

返回对关键哈希的函数。 返回比较关键相等性的函数。 比较二个无序容器的内容。 为 std::unordered_multiset 特化 std::swap 算法。交换 lhs 与 rhs 的内容。调用 lhs.swap(rhs) 。

qq_40788199的博客 664

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++ std::unordered_multiset

std::unordered_multiset template < class Key, // unordered_multiset::key_type/value_type class Hash = hash<Key>, // unordered_multiset::hasher ...

weixin_30918415的博客 273

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

c++11 标准模板(STL)(std::unordered_multiset)(二)

1) 构造空容器。设置 max_load_factor() 为 1.0 。 2) 构造拥有范围 [first, last) 的内容的容器。设置 max_load_factor() 为 1.0 。 3) 复制构造函数。构造拥有 other 内容副本的容器,一同复制加载因子、谓词和哈希函数。 4) 移动构造函数。用移动语义构造拥有 other 内容的容器。 5) 构造拥有 initializer_list init 内容的容器,同 unordered_multiset(init.begin(), init.en

qq_40788199的博客 583

C++容器之无序多集(std::unordered_multiset)

无序多集是不按特定顺序存储元素的容器,允许根据单个元素的值快速检索这些元素,与无序集容器非常相似,但允许不同的元素具有相同的值。

flysnow010的博客 1122

set、multiset、unordered_set

**std::set:**元素不重复,默认有 从小到大的排序(底层红黑树) **std::multiset:**存储的元素可重复,默认有从小到大的排序(底层红黑树) **std::unordered_set:**容器内的元素无序排列,基于值进行获取单个元素速度非常快(哈希表) 若想读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,使用unordered_set 例题:https://leetcode-cn.com/problems/intersection-of-two-arrays/ 给定两

Q_LJJ的博客 311

C ++ STL无序多集– std :: unordered_multiset

In this tutorial you will learn about STL Unordered Multiset container in c++ and all functions applicable on it. 在本教程中,您将了解C ++中的STL无序多集容器以及适用于它的所有函数。 As name says that, this is an unordered contai...

culing2941的博客 343

c++11 标准模板(STL)(std::unordered_multiset)(八)

从容器擦除所有元素。此调用后 size() 返回零。 从容器移除指定的元素。 1) 移除位于 pos 的元素。 2) 移除范围 [first; last) 中的元素,它必须是 *this 中的合法范围。 3) 移除关键等于 key 的所有元素。

qq_40788199的博客 308

c++11 标准模板(STL)(std::unordered_multiset)(七)

插入以给定的 args 原位构造的新元素到容器。 细心地使用 emplace 允许在构造新元素的同时避免不必要的复制或移动操作。 插入新元素到容器中,以 hint 为放置元素位置的建议。原位构造元素,即不进行复制或移动操作。 将内容与 other 的交换。不在单个元素上调用任何移动、复制或交换操作。

qq_40788199的博客 318

c++11 标准模板(STL)(std::unordered_multiset)(三)

起) 替换容器内容。 1) 复制赋值运算符。以 other 的副本替换内容。 2) 移动赋值运算符。用移动语义以 other 的内容替换内容(即从 other 移动 other 中的数据到此容器)。 3) 以 initializer_list ilist 所标识者替换内容。

qq_40788199的博客 382
上一篇: std::unordered_set
下一篇: QCustomplot基本使用
无夜_
博客等级 码龄7年 2916粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值