不使用<unordered_map>
时间: 2024-01-14 21:20:57 浏览: 62
不使用`unordered_map`的话,你可以考虑使用其他容器来实现类似的功能。以下是一些替代方案:
1. 使用`map`容器:`map`是一个有序的关联容器,每个元素都包含一个键和对应的值。与`unordered_map`不同,`map`中的元素是按照键的顺序进行排序的。插入、删除和查找元素的时间复杂度为O(log n)。你可以使用`map`来实现类似的功能,只需将头文件中的`unordered_map`替换为`map`即可。
```cpp
#include <map>
//...
std::map<Key, Value> myMap;
```
2. 使用`vector`和`pair`:如果你不需要按照键进行快速查找,你也可以使用`vector`来存储键值对。你可以使用`pair`来表示每个键值对,然后将这些`pair`存储在`vector`中。插入、删除和查找元素的时间复杂度为O(n)。以下是一个示例:
```cpp
#include <vector>
#include <utility>
//...
std::vector<std::pair<Key, Value>> myVector;
```
这些是两种不使用`unordered_map`的替代方案。具体使用哪种方案取决于你的需求和性能要求。
相关问题
<unordered_map>
<unordered_map>是C++标准库中的一个头文件,它提供了unordered_map容器的定义和相关操作。unordered_map是以哈希表作为底层结构的关联式容器,它可以存储一组键-值对,并且可以根据键快速进行查找、插入和删除操作。与有序关联式容器(map)相比,unordered_map在查询操作上具有更高的效率,但是元素的顺序是无序的。通过使用哈希函数,unordered_map将键映射到桶(bucket)中,以实现快速的查找和插入。因此,unordered_map适用于对查找效率要求较高的场景。<span class="em">1</span>
#### 引用[.reference_title]
- *1* [unordered_map](https://blog.csdn.net/m0_38121874/article/details/103138213)[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_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
请不使用#include <unordered_map>编译
好的,以下是不使用 `unordered_map` 的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 26;
vector<int> graph[MAXN]; // 存储树的关系图
bool visited[MAXN]; // 标记节点是否已经被访问
// 先根遍历函数
void preOrder(int node) {
if (!visited[node]) { // 如果该节点没有被访问
visited[node] = true; // 标记为已访问
cout << char(node + 'A') << " "; // 输出该节点
for (int i = 0; i < graph[node].size(); ++i) { // 遍历该节点的所有子节点
preOrder(graph[node][i]); // 递归遍历子节点
}
}
}
int main() {
char parent, child;
memset(visited, false, sizeof(visited)); // 初始化visited数组
while (cin >> parent >> child) { // 读入树的关系序偶对
graph[parent - 'A'].push_back(child - 'A'); // 添加节点之间的关系
}
for (int i = 0; i < MAXN; ++i) { // 找到根节点
if (graph[i].size() > 0 && !visited[i]) {
preOrder(i); // 从根节点开始先根遍历整棵树
}
}
cout << endl;
return 0;
}
```
这里我们使用一个二维向量 `graph` 存储整棵树的关系图。对于每一对双亲节点和孩子节点的关系,我们都将孩子节点的编号添加到双亲节点的子节点列表中。
同时,我们使用一个布尔数组 `visited` 标记每个节点是否已经被访问。在先根遍历函数 `preOrder` 中,我们从根节点开始遍历整棵树。对于每个节点,我们先判断它是否已经被访问,如果没有被访问,则输出该节点,标记为已访问,并递归遍历该节点的子节点。
最后,在主函数中,我们扫描所有的节点,找到有孩子节点但没有被访问的节点,作为根节点开始先根遍历整棵树。注意,这里我们将节点编号转换成大写字母输出。
阅读全文