文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 到底谁是小公猫……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Trivium的单曲《Throes Of Perdition》 《Throes Of Perdition》- Trivium 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁:...

小小编辑
44分钟前
68
1
基础选择器

注意:本教程参考自网上流传的李兴华老师的jquery开发框架视频,但是苦于没有相应的配套笔记,由我本人做了相应的整理. 本次学习的内容 学习jquery提供的各种选择器的使用,掌握了jquery选择...

江戸川
49分钟前
1
0
Spring中static变量不能@value注入的原因

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。 类似于这样写的。 public class RedisShardedPool { private static ShardedJedisPool pool...

钟然千落
今天
2
0
CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部