C/C++ std::map和std::pair

#include<stdio.h>
#include<map>
using namespace std;
typedef map<int,char*> Container;
typedef pair<int,char *> Element;

int main()
{
    Container container;
    for (int nIndex=0;nIndex < 10;nIndex ++){
        char *p = new char[16];
        sprintf(p,"element %d \0",nIndex);
        Element element(nIndex,p);
        container.insert(element);
    }

    Container::const_iterator ptr;
    ptr = container.find(1);
    if(ptr != container.end()){
        printf("find key 1 \n");
    }

    printf("--------------------------------------\n");
    Container::iterator begin = container.begin();
    while(begin != container.end())
    {
        printf("%d element value :%s\n",(*begin).first,(*begin).second);
        //delete [] (*begin).second;
        //(*begin).second = NULL;
        begin++;
    }
    printf("--------------------------------------\n");
    char *p = new char[16];
    sprintf(p,"element %d \0",1000);
    Element element(10,p);
    container.insert(element);

    begin = container.begin();
    while(begin != container.end())
    {
        printf("%d element value :%s\n",(*begin).first,(*begin).second);
        delete [] (*begin).second;
        (*begin).second = NULL;
        begin++;
    }

    return 0;
}

find key 1
--------------------------------------
0 element value :element 0
1 element value :element 1
2 element value :element 2
3 element value :element 3
4 element value :element 4
5 element value :element 5
6 element value :element 6
7 element value :element 7
8 element value :element 8
9 element value :element 9
--------------------------------------
0 element value :element 0
1 element value :element 1
2 element value :element 2
3 element value :element 3
4 element value :element 4
5 element value :element 5
6 element value :element 6
7 element value :element 7
8 element value :element 8
9 element value :element 9
10 element value :element 1000

说明:以下写法错误

//std::map<std::pair<std::string,std::string>, int>  edMap;
//std::pair<std::string,std::string> key;
//edMap.insert(key,d);

正确写法如下:

typedef std::pair<std::string, std::string> my_key_type;
typedef std::map<my_key_type, int>          my_map_type;
my_map_type m;
m.insert(my_map_type::value_type(my_key_type("A", "B"), 43));
//m.insert(std::make_pair(my_key_type("C", "D"), -5));
#include<iostream>
#include<vector>

template <typename T1, typename T2>
bool pair_comp_second_rev(const std::pair<T1, T2> &a,
                          const std::pair<T1, T2> &b) {
  return a.second > b.second;
}

int main(){
    const std::vector<double> prob_step = {11.0,22.0,33.0,44.0,55.0,66.0};
    std::vector<std::pair<int, float>> prob_idx;

    for (size_t i = 0; i < prob_step.size(); ++i) {
        prob_idx.push_back(std::pair<int, double>(i, prob_step[i]));
    }

    prob_idx.push_back(std::pair<int, double>(1, 33));
    prob_idx.push_back(std::pair<int, double>(1, 22));
    for (size_t i = 0; i < prob_idx.size();++i) {
        std::cout << prob_idx[i].first << std::endl;
        std::cout << prob_idx[i].second << std::endl;
        std::cout << "------------------------" << std::endl;
    }

    std::cout << "*******************************************" << std::endl;
    std::sort(prob_idx.begin(), prob_idx.end(), pair_comp_second_rev<int, double>);
    std::vector<std::pair<int, double> > tt = std::vector<std::pair<int, double> >(prob_idx.begin(), prob_idx.begin() + 3);

    for (size_t i = 0; i < tt.size();++i) {
        std::cout << tt[i].first << std::endl;
        std::cout << tt[i].second << std::endl;
        std::cout << "------------------------" << std::endl;
    }

    return 0;
}

0
11
------------------------
1
22
------------------------
2
33
------------------------
3
44
------------------------
4
55
------------------------
5
66
------------------------
1
33
------------------------
1
22
------------------------
*******************************************
5
66
------------------------
4
55
------------------------
3
44
------------------------

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值