C++ map操作

maps.cpp

#include "maps.h"
#include "map"
#include <string>
#include <iostream>
#include "student.h"

using namespace std;

class sort {
public:
    bool operator()(Student const &_A, Student const &_B) const {
        if (_A.num < _B.num)
            return true;
        if (_A.num > _B.num)
            return false;
        if (_A.age < _B.age)
            return true;
        if (_A.age > _B.age)
            return false;
        if (_A.name.compare(_B.name) < 0)
            return true;
        if (_A.name.compare(_B.name) > 0)
            return false;
        return false;
    }
};

void showmMaps() {
    map<int, string> mapis_1;
    map<int, Student> mapis_2;
    map<int, char> maps_3;
    map<string, char> maps_4;
    //这个构造为仿函数  类似于java的Map的compareable
    map<Student, int, sort> mapStudent;
    mapStudent.insert(pair<Student, int>(Student("maqi", 1102, man, 18), 1));
    mapStudent.insert(pair<Student, int>(Student("lisi", 1102, man, 19), 2));
    mapStudent.insert(pair<Student, int>(Student("wanger", 1104, man, 28), 3));
    mapStudent.insert(pair<Student, int>(Student("maqi", 1111, wuman, 18), 4));
    mapStudent.insert(pair<Student, int>(Student("maqi(WH)", 1111, wuman, 18), 4));
    //add方法
    mapis_1[1002] = string("maqi_1002");
    mapis_1[1001] = string("maqi_1001");
    mapis_1.insert(pair<int, string>(1003, "maqi_1003"));
    mapis_2.insert(pair<int, Student>(1, Student("maqi_1")));
    mapis_2.insert(pair<int, Student>(2, Student("maqi_2")));
    mapis_2.insert(pair<int, Student>(3, Student("maqi_3")));
    const pair<map<int, string>::iterator, bool> &pair = mapis_1.insert(
            map<int, string>::value_type(1005, "maqi_1005"));
    if (pair.second == true)cout << "insert success?  " << true << endl;
    map<int, string> mapis_copy(mapis_1.begin(), mapis_1.end());
    cout << "mapis_1.size() " << mapis_1.size() << endl;
    cout << "mapis_1.count(1002) " << mapis_1.count(1002) << endl;

    map<int, string>::iterator it;
    //动态数组 for循环
    for (it = mapis_1.begin(); it != mapis_1.end(); ++it) {
        cout << it->first << ' ' << it->second << endl;
    }
    cout << "===================================================" << endl;
    for (it = mapis_copy.begin(); it != mapis_copy.end(); ++it) {
        cout << it->first << ' ' << it->second << endl;
    }

    cout << "==============应用反相迭代器==============" << endl;
    map<int, string>::reverse_iterator iter;
    for (iter = mapis_1.rbegin(); iter != mapis_1.rend(); iter++)
        cout << iter->first << "  " << iter->second << endl;

    cout << "=================find 用法====================" << endl;
    map<int, string>::iterator finditer = mapis_1.find(1006);
    if (finditer != mapis_1.end())
        cout << "Find, the value is " << iter->second << endl;
    else
        cout << "Do not Find" << endl;

    cout << "=================erase  用法====================" << endl;
    mapis_1.erase(1001);
    mapis_1.erase(mapis_1.find(1005));
    //迭代器循环while
    map<int, string>::iterator mapit = mapis_1.begin();
    while (mapit != mapis_1.end()) {
        cout << mapit->first << ' ' << mapit->second << endl;
        mapit++;
    }
    cout << "=================sort  用法====================" << endl;
    //int 默认支持 < 操作
    for (auto item : mapis_2) {
        cout << item.first << ' ' << item.second.name << endl;
    }
    cout << "=================仿函数 用法====================" << endl;
    for (auto item : mapStudent) {
        cout << item.second << ' ';
        cout << " name = " << item.first.name << " num = " << item.first.num << " sex = "
             << item.first.sex << " age = " << item.first.age
             << endl;
    }
    //清空
    mapis_1.clear();
    cout << "mapis_1.empty()" << mapis_1.empty() << endl;
}

总结:
1.map也可以迭代,并没像java那样分那么清楚,迭代方法和list,vector相似。
2.反向迭代reverse_iterator 了解一下。
3.仿函数方便结构体或class的遍历,注意map的写法。

 map<Student, int, sort> mapStudent;

猜你喜欢

转载自blog.csdn.net/qq_20330595/article/details/82345113
今日推荐