文档章节

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
Linux C++、Boost、ACE ......

Linux/UNIX、C++、Boost、ACE、Shell ...... Linux/UNIX C++高级培训---远程班 培养目标:Linux/UNIX C++高级软件工程师 专注Linux/UNIX服务器端的软件开发(后台开发),培养企业所需的专业...

athxy
2010/04/01
0
1
C++ STL学习——list

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

chenyufeng1991
2016/08/22
0
0
STL,ATL,WTL的联系与区别

STL,ATL,WTL的联系与区别 STL 即 Standard Template Library STL(标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时...

IMGTN
2012/06/04
0
0
STL vector+sort排序和multiset/multimap排序比较

本文由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序。在通过vector+so...

小星星程序员
2014/11/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway真的有那么差吗?

前言 Spring Cloud从一开始最受大家质疑的就是网关性能,那是由于Spring Cloud最初选择了使用Netflix几年前开源的Zuul作为基础,而高性能版的Zuul 2在经过了多次跳票之后,对于Spring这样的整...

Java小铺
37分钟前
1
0
SpringBoot远程调试,远程debug你的线上项目

开发环境中代码出错了,可以利用IDE的debug功能来进行调试。那线上环境出错呢? 一、假设我们的项目是部署在tomcat中,那我们就需要对tomcat进行一定对配置,配置如下。 1. windows系统中,找...

nonnetta
42分钟前
0
0
JAVA秒杀优化方向

秒杀优化方向 将请求尽量拦截在系统上游:传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小,我们可以通过限流、...

小贱是个程序员
50分钟前
0
0
C# 统计字符串中大写字母和小写字母的个数

static void Main() { int count1 = 0; int count2 = 0; Console.WriteLine("请输入字符串"); string str = Convert.ToString(Consol......

熊二的爸爸是谁
52分钟前
0
0
分布式服务框架之远程通讯技术及原理分析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是...

老道士
57分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部