返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ Boost Array与Unordered怎么使用
  • 151
分享到

C++ Boost Array与Unordered怎么使用

2023-07-04 13:07:44 151人浏览 八月长安
摘要

这篇文章主要介绍“c++ Boost Array与Unordered怎么使用”,在日常操作中,相信很多人在C++ Boost Array与Unordered怎么使用问题上存在疑惑,小编查阅了各式资料,

这篇文章主要介绍“c++ Boost Array与Unordered怎么使用”,在日常操作中,相信很多人在C++ Boost Array与Unordered怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++ Boost Array与Unordered怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、提要

Boost.Array 库在 boost/array.hpp 中定义了类模板 boost::array。 boost::array 与 std::array 类似,后者是使用 C++11 添加到标准库中的。如果您使用 C++11 开发环境,则可以忽略 boost::array。

二、示例boost::array

使用 boost::array,可以创建一个与 C 数组具有相同属性的数组。此外,boost::array 符合 C++ 容器的要求,这使得处理这样的数组就像处理任何其他容器一样容易。原则上,可以将 boost::array 视为容器 std::vector,但 boost::array 中的元素数量是恒定的。

示例 14.1。 boost::array 的各种成员函数

#include <boost/array.hpp>#include <string>#include <alGorithm>#include <iOStream>int main(){  typedef boost::array<std::string, 3> array;  array a;  a[0] = "cat";  a.at(1) = "shark";  *a.rbegin() = "spider";  std::sort(a.begin(), a.end());  for (const std::string &s : a)    std::cout << s << '\n';  std::cout << a.size() << '\n';  std::cout << a.max_size() << '\n';}

如示例 14.1 所示,使用 boost::array 相当简单,不需要额外解释,因为调用的成员函数与来自 std::vector 的成员函数具有相同的含义。

三、Boost.Unordered

Boost.Unordered

Boost.Unordered 提供类 boost::unordered_set、boost::unordered_multiset、boost::unordered_map 和 boost::unordered_multimap。这些类与使用 C++11 添加到标准库中的散列容器相同。因此,如果您使用支持 C++11 的开发环境,则可以忽略 Boost.Unordered 中的容器。

示例 15.1。使用 boost::unordered_set

#include <boost/unordered_set.hpp>#include <string>#include <iostream>int main(){  typedef boost::unordered_set<std::string> unordered_set;  unordered_set set;  set.emplace("cat");  set.emplace("shark");  set.emplace("spider");  for (const std::string &s : set)    std::cout << s << '\n';  std::cout << set.size() << '\n';  std::cout << set.max_size() << '\n';  std::cout << std::boolalpha << (set.find("cat") != set.end()) << '\n';  std::cout << set.count("shark") << '\n';}

boost::unordered_set 可以替换为示例 15.1 中的 std::unordered_set。 boost::unordered_set 与 std::unordered_set 没有区别。

示例 15.2。使用 boost::unordered_map

#include <boost/unordered_map.hpp>#include <string>#include <iostream>int main(){  typedef boost::unordered_map<std::string, int> unordered_map;  unordered_map map;  map.emplace("cat", 4);  map.emplace("shark", 0);  map.emplace("spider", 8);  for (const auto &p : map)    std::cout << p.first << ";" << p.second << '\n';  std::cout << map.size() << '\n';  std::cout << map.max_size() << '\n';  std::cout << std::boolalpha << (map.find("cat") != map.end()) << '\n';  std::cout << map.count("shark") << '\n';}

Example15.2

示例 15.2 使用 boost::unordered_map 来存储几种动物的名称和腿数。再一次,boost::unordered_map 可以替换为 std::unordered_map。

示例 15.3。使用 Boost.Unordered 的用户定义类型

#include <boost/unordered_set.hpp>#include <string>#include <cstddef>struct animal{  std::string name;  int legs;};bool operator==(const animal &lhs, const animal &rhs){  return lhs.name == rhs.name && lhs.legs == rhs.legs;}std::size_t hash_value(const animal &a){  std::size_t seed = 0;  boost::hash_combine(seed, a.name);  boost::hash_combine(seed, a.legs);  return seed;}int main(){  typedef boost::unordered_set<animal> unordered_set;  unordered_set animals;  animals.insert({"cat", 4});  animals.insert({"shark", 0});  animals.insert({"spider", 8});}

在示例 15.3 中,动物类型的元素存储在 boost::unordered_set 类型的容器中。由于 boost::unordered_set 的哈希函数不知道类动物,因此无法自动计算此类元素的哈希值。这就是为什么必须定义散列函数的原因&mdash;&mdash;否则无法编译示例。

要定义的哈希函数的名称是 hash_value()。它必须期望作为其唯一参数的类型的对象应该计算哈希值。 hash_value() 的返回值类型必须是 std::size_t。

当必须为对象计算哈希值时,会自动调用函数 hash_value()。此函数是为 Boost 库中的各种类型定义的,包括 std::string。对于动物等用户定义的类型,它必须由开发者定义。

通常,hash_value() 的定义相当简单:通过一个接一个地访问对象的成员变量来创建哈希值。这是通过函数 boost::hash_combine() 完成的,该函数由 Boost.Hash 提供并在 boost/functional/hash.hpp 中定义。如果使用 Boost.Unordered,则不必包含此头文件,因为此库中的所有容器都访问 Boost.Hash 来计算哈希值。

除了定义 hash_value() 之外,您还需要确保可以使用 == 比较两个对象。这就是示例 15.3 中运算符 operator== 为动物重载的原因。

C++11 标准库中的散列容器使用头文件中的散列函数函数。 Boost.Unordered 的散列容器需要散列函数 hash_value()。是否在 hash_value() 中使用 Boost.Hash 并不重要。 Boost.Hash 是有意义的,因为像 boost::hash_combine() 这样的函数可以更容易地从多个成员变量逐步计算哈希值。然而,这只是 hash_value() 的一个实现细节。除了使用不同的散列函数之外,Boost.Unordered 的散列容器和标准库中的散列容器基本上是等价的。

到此,关于“C++ Boost Array与Unordered怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C++ Boost Array与Unordered怎么使用

本文链接: https://lsjlt.com/news/345328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ Boost Array与Unordered怎么使用
    这篇文章主要介绍“C++ Boost Array与Unordered怎么使用”,在日常操作中,相信很多人在C++ Boost Array与Unordered怎么使用问题上存在疑惑,小编查阅了各式资料,...
    99+
    2023-07-04
  • C++BoostArray与Unordered使用介绍
    目录一、提要二、示例boost::array三、Boost.Unordered一、提要 Boost.Array 库在 boost/array.hpp 中定义了类模板 boost::a...
    99+
    2022-11-13
    C++ Array与Unordered C++ Boost Array C++ Boost Unordered
  • C++ Boost Lockfree怎么使用
    本文小编为大家详细介绍“C++ Boost Lockfree怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++ Boost Lockfree怎么使用”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-07-04
  • C++ Boost Lockfree怎么使用
    要使用C++ Boost Lockfree,您可以按照以下步骤操作:1. 安装Boost库:首先,您需要在您的计算机上安装Boost...
    99+
    2023-08-17
    C++
  • C++的Boost Bimap怎么使用
    这篇文章主要介绍了C++的Boost Bimap怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的Boost Bimap怎么使用文章都会有所收获,下面我们一起来看看吧。一、提要库...
    99+
    2023-07-04
  • C++11的array容器怎么使用
    本篇内容介绍了“C++11的array容器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!      &...
    99+
    2023-06-19
  • C++ Boost MPI接口怎么应用
    这篇“C++ Boost MPI接口怎么应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++&nbs...
    99+
    2023-07-04
  • C++的Boost MultiIndex如何使用
    今天小编给大家分享一下C++的Boost MultiIndex如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-07-04
  • C++中Boost的智能指针scoped_ptr怎么使用
    本篇内容主要讲解“C++中Boost的智能指针scoped_ptr怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中Boost的智能指针scoped_ptr怎么使用”吧!boost:...
    99+
    2023-07-02
  • javascript array怎么使用
    这篇文章主要介绍“javascript array怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript array怎么使用”文章能帮助大家解决问题。创建数组JavaScript...
    99+
    2023-07-06
  • Boost库怎么用
    这篇文章给大家分享的是有关Boost库怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了*...
    99+
    2023-06-17
  • C++语言中std::array怎么用
    这篇文章给大家分享的是有关C++语言中std::array怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述std::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与...
    99+
    2023-06-15
  • C++使用boost::lexical_cast进行数值转换
    在STL库中,我们可以通过stringstream来实现字符串和数字间的转换: int i = 0; stringstream ss; ss <<...
    99+
    2024-04-02
  • vb array函数怎么使用
    在VB中,Array函数用于创建一个数组。 语法: Array([arglist]) arglist : 必需,包含数组的元素列表。...
    99+
    2024-02-29
    vb
  • C++之array数组如何使用
    本篇内容介绍了“C++之array数组如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义和初始化数组数组是一个复合类型,可以通过类似...
    99+
    2023-07-05
  • C++ Boost MultiArray简化使用多维数组库
    目录一、介绍Boost.MultiArray二、示例一、介绍Boost.MultiArray Boost.MultiArray Boost.MultiArray 是一个简化使用多维数...
    99+
    2022-11-13
    C++ Boost MultiArray C++ Boost MultiArray库 C++ 多维数组简化
  • C++ Boost Lockfree超详细讲解使用方法
    Boost Lockfree 是一个基于 C++ 的库,用于实现无锁的数据结构和算法。无锁的数据结构和算法是为了解决并发编程中的竞争...
    99+
    2023-08-16
    C++
  • boost字符串处理函数format怎么使用
    这篇文章主要介绍“boost字符串处理函数format怎么使用”,在日常操作中,相信很多人在boost字符串处理函数format怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”boost字符串处理函数f...
    99+
    2023-07-02
  • C++11中的Array的用法与vector用法介绍
    本篇内容主要讲解“C++11中的Array的用法与vector用法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11中的Array的用法与vector用法介绍”吧!Array-对于Ar...
    99+
    2023-06-15
  • JavaScript的links array文档怎么使用
    本篇内容主要讲解“JavaScript的links array文档怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript的links array文档怎么使用”吧!links ...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作