参考: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. ftp服务器搭建(离线安装vsftpd),配置

    1.下载vsftp:http://rpmfind.net/linux/rpm2html/search.php?query=vsftpd(x86-64) 2.检查是否已经安装了vsftp rpm -qa ...

  2. Codeforces 932D - Tree

    932D - Tree 思路: 树上倍增 anc[i][u]:u的2^i祖先 mx[i][u]:u到它的2^i祖先之间的最大值,不包括u pre[i][u]:以u开始的递增序列的2^i祖先 sum[i ...

  3. Windows 下 Redis 服务无法启动,错误 1067 进程意外终止解决方案

    1.检查端口是否被占用 2.修改 Windows 服务里的 Redis 服务为本地系统服务(修改方式见下文) 方法: 1.看系统日志 桌面计算机/此电脑(Win10名称)右键打开管理,或 Win+R ...

  4. 彻底搞懂 CPU 中的内存结构

    https://www.cnblogs.com/YJK923/p/10302180.html

  5. 怎样在winform中上传图片

    http://jingyan.baidu.com/article/b7001fe157d6b60e7382dd7f.html 因为WinForm都是运行在本地的,而我们的网站一般都是布署在服务器上,运 ...

  6. 20 Interesting WPF Projects on CodePlex

    20 Interesting WPF Projects on CodePlex (Some for Silverlight too) Pete Brown - 22 November 2010   I ...

  7. 20170914xlVBA通讯公司分类汇总

    Sub 租房() Dim Wb As Workbook Dim Sht As Worksheet Dim OpenWb As Workbook Dim OpenSht As Worksheet Dim ...

  8. 最新的vueWebpack项目

    最近优化了我的vueWebpack多入口框架,感觉清新了好多:http://pan.baidu.com/s/1bNYJp0

  9. android -------- Eclipse选择NDK路径时 “Not a valid NDK directory”

    在 Eclipse选择NDK路径时 出现 “Not a valid NDK directory”  这样的错误 解决方式1 在你安装的ndk的主目录下创建一个ndk-build空文件,然后重新打开对话 ...

  10. JSX语法

    什么是JSX语法:就是符合 xml 规范的 JS 语法:(语法格式相对来说,要比HTML严谨很多) 1. 如何启用 jsx 语法? 安装 `babel` 插件 - 运行`cnpm i babel-co ...