std的find和reverse_iterator联合使用

上代码:

// test2013.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include<iostream>
#include<vector>
#include<map>
#include<string>
using namespace std;

struct CmpByKeyNumber {
    bool operator()(const int& k1, const int& k2) {
        return k1 < k2;  //升序排列
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    std::map<int, string, CmpByKeyNumber> arr;

    arr.insert(make_pair(0, "dd"));
    arr.insert(make_pair(1, "bbbbb"));
    arr.insert(make_pair(2, "aaaaaaaaaaa"));

    std::map<int, string>::iterator itTemp = arr.find(2);
    if (itTemp == arr.end())
    {
        return -2;
    }

    /*
    这里转为反向迭代器。
    注意,正向迭代器转为反向迭代器后,反向迭代器指向的是正向迭代器的前一个元素。
    所以,这里用了++:先++,itTemp指向下一个元素(即是arr.end() ),
    通过这样的方式,反向迭代器和正向迭代器指向的都是同一个pair。
    */
    std::map<int, string>::reverse_iterator it(++itTemp);
    for (; it != arr.rend(); it++)
    {
        int key = it->first;
        string dd = it->second;
        printf("pair( %d, %s )\n", key, dd.c_str());
    }

    printf("\ndone\n");
    getchar();
    return 0;
}

 

运行效果:

 

完。

 

posted @ 2016-08-17 17:40  liyou  阅读(1271)  评论(1编辑  收藏  举报