c++stl中的map

C++编程中,map是一个容器类模板,用于存储键值对(key-value)形式的数据。其本质是一种关联式容器(associative container),通过键(key)来进行查找和访问值(value)。

map中的键值对是按照键进行自动排序的,可以根据键名查找值,并且支持遍历所有的键值对。在查找元素时,map使用红黑树(RB tree)数据结构来实现,因此查找效率相当高。

在C++中使用map时,需要引入头文件<map>,其中键和值的类型可以任意指定。常见的键值对类型有string-int、int-double等。

以下是使用map来存储字符串和整数的示例:

#include <iostream>
#include <map>
using namespace std;

int main() {
    map<string, int> m;
    m["apple"] = 1;
    m["orange"] = 2;
    m["banana"] = 3;

    cout << "m contains:" << endl;
    for (auto it = m.begin(); it != m.end(); it++) {
        cout << it->first << ": " << it->second << endl;
    }

    return 0;
}

这段程序中,我们定义了一个map类型的对象m,并将三个键值对分别插入到这个map中。然后我们遍历这个map,并输出其中的键值对。输出结果为:

```
m contains:
apple: 1
banana: 3
orange: 2
```

可以看到,输出结果中键是按照字母顺序进行排序的,而值则与键名一一对应。这是map容器的特性之一。

那么map具体怎么使用呢

使用map时,需要注意以下几点:

1. map中的键值对是按照键进行自动排序的,所以键类型必须支持小于比较运算符,或者用户需要提供键类型的比较函数(或仿函数)来进行排序。
2. map中的键必须是唯一的,如果要存储重复键,则需要使用multimap容器。
3. map的迭代器是一种双向迭代器,支持前后移动,但不支持随机访问。
4. 使用下标操作符[]可以方便地插入、访问和修改元素,如果元素不存在,则会自动插入一个键为该下标的新元素,同时值被初始化为元素类型的默认值。

#include <iostream>
#include <map>
using namespace std;

int main() {
    map<string, int> m;

    // 插入元素
    m.insert(make_pair("apple", 10));
    m.insert(make_pair("orange", 20));
    m["banana"] = 30;

    // 查找元素
    if (m.find("apple") != m.end()) {
        cout << "apple: " << m["apple"] << endl;
    } else {
        cout << "apple not found" << endl;
    }

    // 遍历元素
    cout << "m contains:" << endl;
    for (auto it = m.begin(); it != m.end(); it++) {
        cout << it->first << ": " << it->second << endl;
    }

    // 修改元素
    m["apple"] = 50;

    // 删除元素
    m.erase("orange");

    return 0;
}

这段程序中,我们定义了一个map类型的对象m,并在其中插入三个键值对。然后我们可以通过find函数来查找某个键是否存在,或使用下标操作符[]来访问某个值。接着我们遍历这个map,并输出其中的键值对。然后我们可以通过下标操作符[]来修改某个键对应的值。最后我们使用erase函数删除指定的键值对。

输出结果为:

```
apple: 10
m contains:
apple: 10
banana: 30
orange: 20
```
 

猜你喜欢

转载自blog.csdn.net/m0_74153798/article/details/131837771