参考:https://www.cnblogs.com/lhwblog/p/6486036.html

Qt 4.8.4 vs2008

#include <QtGui/QApplication>

#include <qlocale.h>
#include <iostream>
#include <string>
#include <locale>
#include <vector>
#include <algorithm>
#include <QTableView>
#include <QTextCodec>
#include <Windows.h>

using namespace std;

struct CONTACT_Info
{
std::wstring name; // 名字
std::wstring addr; // 住址
};

static std::string WideToAnsi(std::wstring w)
{
char tmp[4096] = {0};

WideCharToMultiByte(CP_ACP, 0, w.c_str(), -1, tmp, 4096, NULL, NULL);

return std::string(tmp);
}

static const char *ZH_CN_LOCALE_STRING = "Chinese_china";
static const locale zh_CN_locale = locale(ZH_CN_LOCALE_STRING);
static const collate<char>& zh_CN_collate = use_facet<collate<char> >(zh_CN_locale);

bool zh_CN_bigger_than(const CONTACT_Info& s1, CONTACT_Info& s2)
{
std::string name1 = WideToAnsi(s1.name);
std::string name2 = WideToAnsi(s2.name);

const char *pb1 = name1.data();
const char *pb2 = name2.data();

return (zh_CN_collate.compare(pb1, pb1+name1.size(), pb2, pb2+name2.size()) < 0);
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

//也可以使用QList,不能用std::list

vector<CONTACT_Info> v;

CONTACT_Info aa;
aa.name = L"第四一";
aa.addr = L"明";
v.push_back(aa);

CONTACT_Info xx;
xx.name = L"阿明";
xx.addr = L"明";
v.push_back(xx);

xx.name = L"周星星";
xx.addr = L"星星";
v.push_back(xx);

CONTACT_Info dd;
dd.name = L"第四一二三";
dd.addr = L"三";
v.push_back(dd);

CONTACT_Info bb;
bb.name = L"第一";
bb.addr = L"二";
v.push_back(bb);

CONTACT_Info cc;
cc.name = L"第叁";
cc.addr = L"六";
v.push_back(cc);

CONTACT_Info ee;
ee.name = L"长河";
ee.addr = L"六";
v.push_back(ee);

CONTACT_Info ff;
ff.name = L"大漠";
ff.addr = L"沙漠";
v.push_back(ff);

cout << "locale name: " << zh_CN_locale.name()<< endl;
std::sort(v.begin(), v.end(), zh_CN_bigger_than);

return a.exec();
}

C++手机通讯录排序的更多相关文章

  1. 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。

      package com.lixu.letterlistview; import java.util.ArrayList; import java.util.List; import org.apa ...

  2. Android程序设计-简单手机通讯录

    在微信中,手机QQ中你会发现软件读取手机通讯录这个功能,这个功能使得软件更好的与手机联系人绑定,从而达到分享,拨打电话,读取用户信息等操作.下面我们将通过一个demo实现这个功能 首先我们看一下效果图 ...

  3. 【Android Demo】简单手机通讯录

    Android 系统给我们提供了访问通讯录的接口,通过接口获取通讯录信息.Adapter 与 View 的连接主要依靠 getView 这个方法返回我们需要的自定义 view. ListView 是 ...

  4. c语言开发手机通讯录

    // //  main.c //  手机通讯录 // //  Created by Kevin-Dfg on 16/4/19. //  Copyright © 2016年 Kevin-Dfg. All ...

  5. Android 个人手机通讯录开发

    一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示                2. ...

  6. python实现将android手机通讯录vcf文件转化为csv

    经常会遇到将手机通讯录导出到电脑并转化为在电脑中可编辑的情况,在网上搜索了很久当前不外乎两种处理方式.1.使用电脑的outlook的通讯簿功能,将手机导出的vcf文件导入到outlook的通讯录中,然 ...

  7. Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人

    package com.example.myapi.phonepersion; import java.util.ArrayList; import java.util.List; import an ...

  8. 利用FluidMoveBehavior制作出手机通讯录平滑的效果

    最近学习Blend,原来Blend制作动画等效果非常棒.下面演示一下FluidMoveBehavior应用,利用Blend中行为中的FluidMoveBehavior制作出手机通讯录平滑的效果 1.在 ...

  9. 二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...

    版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任. https://blog.csdn.net/lidew521/article/details/244418 ...

随机推荐

  1. 获取IP及判断IP是否在区间

    /// <summary> /// 获取客户端IP /// </summary> /// <returns></returns> public stat ...

  2. 手动添加jar包到maven仓库

    引言: 虽然配置了maven以后可以通过索引的方式自动下载jar包到本地maven仓库,从而使项目中直接使用本地仓库里面的架包, 但是这一招并不是每一次都灵应,也有遇到了失败的时候,当遇到失败的时候, ...

  3. 设计模式(一)Chain Of Responsibility责任链模式

    设计模式篇章,源于网课的学习,以及个人的整理 在我们接收用户提交的字符时,常常会使用到过滤,在学习责任链模式前,我们是这样做的 1.定义一个类 public class MsgProcesser { ...

  4. ZZNU 正约数之和

    #include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #incl ...

  5. 第 3 章 镜像 - 010 - base 镜像

    base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubunt ...

  6. WIN7右键在目录当前打开命令行Cmd窗口

    Win7系统大家习惯“Win+R”的组合键打开命令提示符. 2. 通常情况下,我们点击鼠标右键是没有命令行选项的.. 3.在桌面上先按住Shift键,然后鼠标右键,出现选项“在此处打开命令窗口(W)” ...

  7. 设计一个带有getmin功能的栈,保证时间复杂度在O(1)

    2017-06-22  20:56:10 需要得到最小值,最简单的思路就是遍历一遍求出最小值.但是这样的时间复杂度会是O(n),不满足O(1)的要求.于是想到在建立一个栈来保存最小值. 具体操作是建立 ...

  8. git stash命令

    命令:git stash 1.使用git stash 保存当前的工作现场, 那么就可以切换到其他分支进行工作,或者在当前分支上完成其他紧急的工作,比如修订一个bug测试提交. 2.如果一个使用了一个g ...

  9. [maven] introduction to the standard directory layout

    The next section documents the directory layout expected by Maven and the directory layout created b ...

  10. Apollo快速安装视频教程

    参见视频 https://www.csdn.net/article/a/2018-05-14/15948340