unordered_vector和vector
时间: 2023-04-05 21:01:13 浏览: 73
的区别是什么?
unordered_vector 是一个自定义的容器,它使用哈希表来存储元素,可以快速地进行查找、插入和删除操作。而 vector 是标准库中的容器,它使用数组来存储元素,可以快速地进行随机访问,但插入和删除操作比较慢。因此,如果需要频繁进行查找操作,可以选择使用 unordered_vector,如果需要频繁进行随机访问操作,可以选择使用 vector。
相关问题
unordered_map和vector区别
unordered_map和vector有以下几点区别:
1. 数据结构:unordered_map是关联容器,它存储的是键值对(key-value pair),其中的每个元素都有一个唯一的键(key)和一个对应的值(value)。而vector是顺序容器,它存储的是一组连续的元素。
2. 元素访问:在unordered_map中,元素可以通过键来访问,即使用occur[x]来获取键为x的值。而在vector中,元素的访问是通过索引,即使用vec[i]来获取索引为i的元素的值。
3. 动态性:unordered_map的大小可以动态地增长或缩小,它会根据需要自动调整内部存储空间。而vector的大小在创建时需要指定,并且在运行时无法动态改变。
4. 初始化方式:unordered_map不需要在创建时指定初始大小,它会根据插入的元素自动调整大小。而vector在创建时可以指定初始大小,并且元素会被初始化为指定的值。
5. 内存占用:由于unordered_map是通过哈希表实现的,它的内存占用通常比vector要大。在存储大量数据时,unordered_map可能会占用更多的内存空间。
综上所述,unordered_map和vector在数据结构、元素访问、动态性、初始化方式和内存占用等方面有一些区别。根据具体的需求,选择合适的容器可以提高代码的效率和可读性。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [map、unordered_map和vector的初始化和底层机理的差别](https://blog.csdn.net/mrqiuwen/article/details/127183780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [leetcodepushfront-PS_inha:解决问题仁荷大学2020年春天](https://download.csdn.net/download/weixin_38695293/20050781)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
Char 36: error: call to implicitly-deleted default constructor of 'unordered_set<vector<int>>' unordered_set<vector<int>> set;
这个错误信息是因为 `unordered_set` 中的元素类型 `vector<int>` 并没有默认构造函数。因此,当你创建 `unordered_set<vector<int>>` 类型的对象时,会调用默认构造函数,但由于元素类型没有默认构造函数,所以会报错。
解决方法是使用自定义哈希函数,显式地指定哈希表的大小,或者使用其他支持类型的容器代替 `unordered_set<vector<int>>`。
以下是使用自定义哈希函数的示例代码:
```c++
#include <iostream>
#include <unordered_set>
#include <vector>
struct VectorHash {
std::size_t operator()(const std::vector<int>& v) const {
std::size_t seed = v.size();
for(auto& i : v) {
seed ^= i + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
return seed;
}
};
int main() {
std::unordered_set<std::vector<int>, VectorHash> set;
set.insert({1, 2, 3});
set.insert({4, 5, 6});
std::cout << set.size() << std::endl; // output: 2
return 0;
}
```
在这个示例中,我们定义了一个名为 `VectorHash` 的结构体,其中包含一个函数调用运算符 `operator()`,用于计算 `vector<int>` 类型的哈希值。在创建 `unordered_set<std::vector<int>, VectorHash>` 类型的对象时,我们将 `VectorHash` 结构体作为第二个模板参数传递给 `unordered_set`,从而使用自定义哈希函数。
需要注意的是,在哈希函数中,我们使用了一种叫做 MurmurHash 的哈希算法来计算哈希值。这是一种比较高效的哈希算法,可以参考相关文献了解更多细节。
阅读全文