参考: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. 【Python】【有趣的模块】【requests】【一】HTTP头信息总结

    [HTTP请求 == 请求行 + 消息报头 + 请求正文 ] 请求行:Method Request-URL HTTP-Version CRLF HTTP协议定义了许多与服务器交互的方法 ① PUT:请 ...

  2. ZZNU 2095 : 我只看看不写题

    把所有时间加起来,最后从大到小排序,一定要把大的先减去.注意花费的时间都是1,这一秒用过就不能再用了,所有用到了并查集的部分知识 #include<iostream> #include&l ...

  3. Maven命令行创建java或javaWeb项目

    Maven命令行创建java或javaWeb项目   1.命令行创建普通java项目 mvn archetype:generate -DgroupId=com.fxust -DartifactId=d ...

  4. Android主页Activity对多个Fragment实现不同的沉浸式标题(图片或者文字标题)

    提示:讲解的该例实现是 FragmentTabHost + Fragment 实现: 1.示例效果图: 2.场景需求: 如示例图所示,在首页实现轮播图的沉浸,而 “发现” 和“我的”页是标题的沉浸. ...

  5. 浅谈 Java JPDA

    前言 程序员在坊间有非常多有趣的故事,其中就有这么一则:”这个在我的电脑上是好的,没问题的呀,诺,你看咯,一定是你打开姿势不正确,浏览器版本不正确,操作系统不统一等,总之不是我代码问题(傲娇)”.看到 ...

  6. python return dict bug?

    def to_dict(self): para = OrdererDict() para['dd'] = self.XXX ... return para 这样一个简单函数 para1 = obj.t ...

  7. x1c2017 8G版 win linux的取舍纠结记录

    x1c 2017 的 i5 7200U 8G ram 的丐版.换了1T SSD.其实一般使用没啥问题. 1 外出携带的轻便性太满意(mac13寸相比之下都太重了): 2 coding时候的安静性,比原 ...

  8. WPF触发器(Trigger)

    WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...

  9. java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: service-one

    一.异常信息 java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have a ...

  10. p1467 Runaround Numbers

    直接搜就行. #include <iostream> #include <cstdio> #include <cmath> #include <algorit ...