文档章节

STL List 排序测试

刘燕阳
 刘燕阳
发布于 2015/04/20 17:44
字数 377
阅读 7
收藏 0


// /opt/rh/devtoolset-2/root/usr/bin/g++ -lredis3m -lboost_regex -lboost_system -lboost_filesystem -lboost_log -lboost_thread -lboost_log_setup  -I/usr/local/include/boost -I/usr/local/include/redis3m main.cpp


#include<list>

#include <boost/lexical_cast.hpp>

#include <redis3m/redis3m.hpp>

#include <iostream>

#include <sys/time.h>


#define CUSTOMER_SCHED_PREFIX "test_customer_sched_"


typedef struct Element{

    int customerId;

    int countRef;

}Element;


class Compare {

public:

    bool operator()(const Element e1, const Element e2) const {

        return e1.countRef > e2.countRef;

    }

};


void set(redis3m::simple_pool::ptr_t& pool, int customerId, int value){

    redis3m::connection::ptr_t c = pool->get();

    c->run(redis3m::command("HSET")<<CUSTOMER_SCHED_PREFIX<<customerId<<value);

    pool->put(c);

}


int sel(redis3m::simple_pool::ptr_t& pool, std::vector<int>& vecCustomerId){

    int customerId = -1;

    if(0 == vecCustomerId.size()){

        return customerId;

    }

    redis3m::command cmd("HMGET");

    cmd<<CUSTOMER_SCHED_PREFIX;

    std::vector<int>::iterator iterVecCustomerId;

    for(iterVecCustomerId=vecCustomerId.begin(); iterVecCustomerId!=vecCustomerId.end(); iterVecCustomerId++){

        cmd<<*iterVecCustomerId;

    }

    redis3m::connection::ptr_t c = pool->get();

    redis3m::reply r = c->run(cmd);

    std::list<Element> lstCountRef;

    if (2 == r.type()){

        std::vector<redis3m::reply> vecReply = r.elements();

        if(0 == vecReply.size()){

            return customerId;

        }

        std::vector<redis3m::reply>::iterator iterVecReply;

        for(iterVecReply=vecReply.begin(), iterVecCustomerId=vecCustomerId.begin();\

            iterVecReply!=vecReply.end() && iterVecCustomerId!=vecCustomerId.end();\

            iterVecReply++, iterVecCustomerId++){

            Element e;

            e.customerId = 0;

            e.countRef = 0;

            if (iterVecReply->type() == 1){

                int value = boost::lexical_cast<int>(iterVecReply->str());

                Element e = {.customerId=*iterVecCustomerId, .countRef=value};

                lstCountRef.push_back(e);

                std::cout<<"customer "<<*iterVecCustomerId<<" count ref = "<<value<<std::endl;

            }else if(iterVecReply->type() == 4){

                Element e = {.customerId=*iterVecCustomerId, .countRef=0};

                lstCountRef.push_back(e);

                std::cout<<"customer "<<*iterVecCustomerId<<" count ref = "<<0<<std::endl;

            }else{

                Element e = {.customerId=*iterVecCustomerId, .countRef=0};

                lstCountRef.push_back(e);

                std::cout<<"customer "<<*iterVecCustomerId<<" count ref = "<<0<<std::endl;

                std::cout<<"customer "<<*iterVecCustomerId<<" something wrong.";

            }

        }

    }

    pool->put(c);

    lstCountRef.sort(Compare());

    Element frontElement = lstCountRef.front();

    Element endElement = lstCountRef.back();

    std::cout<<"front customer "<<frontElement.customerId<<" count ref = "<<frontElement.countRef<<std::endl;

    std::cout<<"end customer "<<endElement.customerId<<" count ref = "<<endElement.countRef<<std::endl;

    customerId = endElement.customerId;

    return customerId;

}


int main(int argc, char **argv){

    redis3m::simple_pool::ptr_t pool = redis3m::simple_pool::create("127.0.0.1");

    std::vector<int> vecCustomerId;

    set(pool, 0, 100);

    set(pool, 1, 200);

    set(pool, 2, 300);

    vecCustomerId.push_back(0);

    vecCustomerId.push_back(1);

    vecCustomerId.push_back(2);

    int customerId = sel(pool, vecCustomerId);

}


测试结果:

customer 0 count ref = 100

customer 1 count ref = 200

customer 2 count ref = 300

front customer 2 count ref = 300

end customer 0 count ref = 100


© 著作权归作者所有

共有 人打赏支持
刘燕阳
粉丝 0
博文 102
码字总数 8944
作品 0
通州
私信 提问
STL list链表的用法详解

------------------------------------------------------------------------------- 原来... STL list链表的用法详解 本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通...

nao
2014/04/10
0
0
C++ STL学习——list

如果由我们自己来实现一个链表,会写上不少代码,包括要实现创建、删除、插入等等操作。但是如果我们用了STL,那么该模板库就为我们提供了一个双向链表list,可以让我们非常方便的实现链表操作...

chenyufeng1991
2016/08/22
0
0
C++ 的排序,速度是 C 语言的 3 倍

如果你还不熟悉 C++,你应该会惊奇 C++ 在某些时候速度比 C 更快些。特别是当代码比较简短时,因为 C++ 的强项 —— 内联(inlineing) 和模板化。 下面的代码对 C 和 C++ 的排序功能进行比较:...

彭博
2012/11/27
818
4
C++ 的排序,速度是 C 语言的 3 倍

如果你还不熟悉 C++,你应该会惊奇 C++ 在某些时候速度比 C 更快些。特别是当代码比较简短时,因为 C++ 的强项 —— 内联(inlineing) 和模板化。 下面的代码对 C 和 C++ 的排序功能进行比较:...

红薯
2012/03/17
2.9K
9
STL 简介,标准模板库

这篇文章是关于C++语言的一个新的扩展——标准模板库的(Standard Template Library),也叫STL。 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话题的深度和广度...

AlphaJay
2010/04/20
352
0

没有更多内容

加载失败,请刷新页面

加载更多

开源 java CMS - FreeCMS2.8会员我的评论

项目地址:http://www.freeteam.cn/ 我的评论 从左侧管理菜单点击我的评论进入。在这里可以查看当前登录会员的所有评论记录。 删除评论 选择评论然后点击删除按钮可以完成删除操作。 为了防止...

freeteam
13分钟前
1
0
Eureka Server启用 https服务指北

文章共 591字,阅读大约需要 2分钟 ! 概 述 在我的前文《Eureka Server 开启Spring Security Basic认证》中已经给 Eureka Server 开启了最基本的鉴权措施,本文则让 HTTPS加持于 Eureka Ser...

CodeSheep
51分钟前
13
0
OSChina 周二乱弹 —— 其实我在地板也睡不着

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @witt-z :分享歌词: 阴天 在不开灯的房间,当所有思绪都一点一点沉淀。 分享莫文蔚的单曲《阴天》: 《阴天》- 莫文蔚 手机党少年们想听歌,...

小小编辑
今天
460
7
微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
3
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部