网站程序是什么?,湘潭网站建设 在线磐石网络,银川网站设计怎么样,深圳工业设计公司推荐点击蓝字关注我们无序容器我们已经熟知了传统 C 中的有序容器 std::map/std::set#xff0c;这些元素内部通过红黑树进行实现#xff0c; 插入和搜索的平均复杂度均为 O(log(size))。在插入元素时候#xff0c;会根据 操作符比较元素大小并判断元素是否相同#xff0c… 点击蓝字关注我们无序容器我们已经熟知了传统 C 中的有序容器 std::map/std::set这些元素内部通过红黑树进行实现 插入和搜索的平均复杂度均为 O(log(size))。在插入元素时候会根据 操作符比较元素大小并判断元素是否相同 并选择合适的位置插入到容器中。当对这个容器中的元素进行遍历时输出结果会按照 操作符的顺序来逐个遍历。而无序容器中的元素是不进行排序的内部通过 Hash 表实现插入和搜索元素的平均复杂度为 O(constant) 在不关心容器内部元素顺序时能够获得显著的性能提升。C11 引入了的两组无序容器分别是std::unordered_map/std::unordered_multimap 和 std::unordered_set/std::unordered_multiset。它们的用法和原有的 std::map/std::multimap/std::set/set::multiset 基本类似 由于这些容器我们已经很熟悉了便不一一举例我们直接来比较一下std::map和std::unordered_map#include iostream
#include string
#include unordered_map
#include mapint main() {// 两组结构按同样的顺序初始化std::unordered_mapint, std::string u {{1, 1},{3, 3},{2, 2}};std::mapint, std::string v {{1, 1},{3, 3},{2, 2}};// 分别对两组结构进行遍历std::cout std::unordered_map std::endl;for( const auto n : u)std::cout Key:[ n.first ] Value:[ n.second ]\n;std::cout std::endl;std::cout std::map std::endl;for( const auto n : v)std::cout Key:[ n.first ] Value:[ n.second ]\n;
}最终的输出结果为std::unordered_map
Key:[2] Value:[2]
Key:[3] Value:[3]
Key:[1] Value:[1]std::map
Key:[1] Value:[1]
Key:[2] Value:[2]
Key:[3] Value:[3]元组了解过 Python 的程序员应该知道元组的概念纵观传统 C 中的容器除了 std::pair 外 似乎没有现成的结构能够用来存放不同类型的数据通常我们会自己定义结构。但 std::pair 的缺陷是显而易见的只能保存两个元素。元组基本操作关于元组的使用有三个核心的函数std::make_tuple: 构造元组std::get: 获得元组某个位置的值std::tie: 元组拆包#include tuple
#include iostreamauto get_student(int id)
{// 返回类型被推断为 std::tupledouble, char, std::stringif (id 0)return std::make_tuple(3.8, A, 张三);if (id 1)return std::make_tuple(2.9, C, 李四);if (id 2)return std::make_tuple(1.7, D, 王五);return std::make_tuple(0.0, D, null);// 如果只写 0 会出现推断错误, 编译失败
}int main()
{auto student get_student(0);std::cout ID: 0, GPA: std::get0(student) , 成绩: std::get1(student) , 姓名: std::get2(student) \n;double gpa;char grade;std::string name;// 元组进行拆包std::tie(gpa, grade, name) get_student(1);std::cout ID: 1, GPA: gpa , 成绩: grade , 姓名: name \n;
}std::get 除了使用常量获取元组对象外C14 增加了使用类型来获取元组中的对象std::tuplestd::string, double, double, int t(123, 4.5, 6.7, 8);
std::cout std::getstd::string(t) std::endl;
std::cout std::getdouble(t) std::endl; // 非法, 引发编译期错误
std::cout std::get3(t) std::endl;*声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。戳“阅读原文”我们一起进步