编程语言
首页 > 编程语言> > c++学习笔记(五)—— IO、顺序容器和关联容器

c++学习笔记(五)—— IO、顺序容器和关联容器

作者:互联网

IO

文件模式

顺序容器

类型

初始化

assign

支持赋值后的拷贝

list<string> a;
vector<const char*> b;
a = b; // 非法
a.assign(b.begin(), b.end()); // 合法

容器关系比较规则

按照顺序一一比较,按照第一个不相等的结果返回

申请和退回空间

不会改变容器大小

  1. reserve
  2. shrink_to_fit(不保证)

capacity

不分配新的内存空间的前提下最多可以保存多少元素

顺序容器适配器

泛型算法

只读算法

写元素算法

重排算法

关联容器

定义构建方法

除了自定义类型的比较函数外,还可以设置全局的比较函数

bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs)
{
    return lhs.isbn() < rhs.isbn();
}

size_t hasher(const Sales_data &sd)
{
    return hash<string>()(sd.isbn());
}

multiset<Sales_data, decltype(compareIsbn)*> bookstore(compareIsbn);
// 桶大小、哈希函数指针和相同判断函数指针
unordered_mutilset<Sales_data, decltype(hasher)*, decltype(compareIsbn)*> bookstore(42, hasher, compareIsbn);

multi中查找元素

因为multi允许重复元素的存在,所以不能用.at

// 第一种:计算数量和迭代器起始位置,进行遍历
string search_item("aquam");
auto entries = authors.count(search_item);
auto iter = authors.find(search_item);
while(entries) {
    ++iter;
    --entries;
}

// 第二种:lower/upper_bound,这两个方法不适用于无序容器
for(auto beg = authors.lower_bound(search_item), end = authors.upper_bound(search_item); beg != end; ++ beg)
    cout << beg-<second << endl;

// 第三种:equal_range,所有关联容器都适用,推荐使用
 for(auto pos = authors.equal_range(search_item); pos.first != pos.end; ++ pos.first)
    cout << pos.first->second << endl;

无序容器管理操作

unordered_set / unordered_map

标签:容器,set,哈希,map,c++,文件,IO,unordered
来源: https://www.cnblogs.com/end-emptiness/p/15811890.html