c++ map如何得到一个key和value相反的map
时间: 2023-03-29 15:02:49 浏览: 136
可以通过遍历原始的map,将每个key和value交换位置,然后插入到一个新的map中,从而得到一个key和value相反的map。具体代码实现如下:
```c
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, string> original_map = {{1, "apple"}, {2, "banana"}, {3, "orange"}};
map<string, int> reversed_map;
for (auto& pair : original_map) {
reversed_map[pair.second] = pair.first;
}
for (auto& pair : reversed_map) {
cout << pair.first << ": " << pair.second << endl;
}
return ;
}
```
输出结果为:
```
apple: 1
banana: 2
orange: 3
```
相关问题
C++map一个key对应多个value
在C语言中,可以使用结构体和链表来实现一个key对应多个value的映射结构。具体实现方式如下:
1. 定义一个结构体,包含一个key和一个指向链表头节点的指针。
```c
typedef struct Node {
int key;
struct ValueNode *head;
} Node;
```
2. 定义一个用于存储value的结构体。
```c
typedef struct ValueNode {
int value;
struct ValueNode *next;
} ValueNode;
```
3. 定义一个哈希表,用于存储所有的Node节点。
```c
#define MAX_SIZE 100000
Node hashTable[MAX_SIZE];
int hash(int key) {
return key % MAX_SIZE;
}
```
4. 实现一个添加key-value对的函数。
```c
void add(int key, int value) {
int index = hash(key);
Node *node = &hashTable[index];
while (node->key != key && node->head != NULL) {
node = node->head;
}
if (node->key != key) {
node->key = key;
node->head = (ValueNode*)malloc(sizeof(ValueNode));
node->head->value = value;
node->head->next = NULL;
} else {
ValueNode *cur = node->head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = (ValueNode*)malloc(sizeof(ValueNode));
cur->next->value = value;
cur->next->next = NULL;
}
}
```
5. 实现一个查询key对应的所有value的函数。
```c
ValueNode* find(int key) {
int index = hash(key);
Node *node = &hashTable[index];
while (node != NULL) {
if (node->key == key) {
return node->head;
}
node = node->head;
}
return NULL;
}
```
使用示例:
```c
add(1, 2);
add(1, 3);
add(2, 4);
ValueNode *values = find(1);
while (values != NULL) {
printf("%d ", values->value);
values = values->next;
}
// Output: 2 3
```
C++遍历map的key和value
可以使用迭代器来遍历map的key和value,示例代码如下:
```cpp
#include <iostream>
#include <map>
int main()
{
std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};
// 遍历key
std::cout << "Keys: ";
for (auto const& pair : myMap)
{
std::cout << pair.first << " ";
}
std::cout << std::endl;
// 遍历value
std::cout << "Values: ";
for (auto const& pair : myMap)
{
std::cout << pair.second << " ";
}
std::cout << std::endl;
// 遍历key和value
std::cout << "Keys and values: ";
for (auto const& pair : myMap)
{
std::cout << "{" << pair.first << ", " << pair.second << "} ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
Keys: 1 2 3
Values: one two three
Keys and values: {1, one} {2, two} {3, three}
```
阅读全文