`
美丽的小岛
  • 浏览: 309393 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

QMap的使用<转>

    博客分类:
  • QT
 
阅读更多

在程序中,Map是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。

这个“数据”即可以是一个字符串,也可以是任意对象,当然也包括自己定义的类对象。
说明:map是以值传递的形式保存数据的。

1. 基本应用
下面以“键-值”都是QString的例子说明QMap的基本使用方法。更详细的说明,请查看《Qt帮助手册》或其他资源。

#include <qmap.h>
#include <iostream>
using namespace std;

class MapTest
{
public:
    void showMap()
    {
if(!m_map.isEmpty()) return; //判断map是否为空

m_map.insert("111", "aaa"); //向map里添加一对“键-值”

if(!m_map.contains("222")) //判断map里是否已经包含某“键-值”
     m_map.insert("222", "bbb");

m_map["333"] = "ccc"; //另一种添加的方式
qDebug("map[333] , value is : " + m_map["333"]); //这种方式既可以用于添加,也可以用于获取,但是你必须知道它确实存在

if(m_map.contains("111")){
     QMap<QString,QString>::iterator it = m_map.find("111"); //找到特定的“键-值”对
     qDebug("find 111 , value is : " + it.data()); //获取map里对应的值
}

cout<< endl;

qDebug("size of this map is : %d", m_map.count()); //获取map包含的总数

cout<< endl;

QMap<QString,QString>::iterator it; //遍历map
for ( it = m_map.begin(); it != m_map.end(); ++it ) {
            qDebug( "%s: %s", it.key().ascii(), it.data().ascii()); //用key()和data()分别获取“键”和“值”
        }

m_map.clear(); //清空map
    }
private:
    QMap<QString,QString> m_map; //定义一个QMap对象
};


调用类函数showMap(),显示结果:
map[333] , value is : ccc
find 111 , value is : aaa

size of this map is : 3

111: aaa
222: bbb
333: ccc

======================================================
2. 对象的使用

map当中还可以保存类对象、自己定义类对象,例子如下(摘自QT帮助文档《Qt Assistant》,更详细的说明参考之):
以注释形式说明

#include <qstring.h>
#include <qmap.h>
#include <qstring.h>

//自定义一个Employee类,包含fn、sn、sal属性
class Employee
{
public:
    Employee(): sn(0) {}
    Employee( const QString& forename, const QString& surname, int salary )
        : fn(forename), sn(surname), sal(salary)
    { }

    QString forename() const { return fn; }
    QString surname() const { return sn; }
    int salary() const { return sal; }
    void setSalary( int salary ) { sal = salary; }

private:
    QString fn;
    QString sn;
    int sal;
};

int main(int argc, char **argv)
{
    QApplication app( argc, argv );

    typedef QMap<QString, Employee> EmployeeMap; //自定义一个map类型,值为EmployeeMap对象
    EmployeeMap map;

    map["JD001"] = Employee("John", "Doe", 50000); //向map里插入键-值
    map["JW002"] = Employee("Jane", "Williams", 80000);
    map["TJ001"] = Employee("Tom", "Jones", 60000);

    Employee sasha( "Sasha", "Hind", 50000 );
    map["SH001"] = sasha;
    sasha.setSalary( 40000 ); //修改map值的内容,因为map采用值传递,所以无效

    //批量打印
    EmployeeMap::Iterator it;
    for ( it = map.begin(); it != map.end(); ++it ) {
        printf( "%s: %s, %s earns %d\n",
                it.key().latin1(),
                it.data().surname().latin1(),
                it.data().forename().latin1(),
                it.data().salary() );
    }
    return 0;
}

Program output: 
JD001: Doe, John earns 50

转自:http://xy2403.blog.163.com/blog/static/2577263201032113724661/

分享到:
评论

相关推荐

    Qt容器类(QList,QMap)遍历器的使用

    QMap&lt;QString, int&gt; myMap = {"apple", 1}, {"banana", 2}, {"cherry", 3}; for (QMap&lt;QString, int&gt;::iterator it = myMap.begin(); it != myMap.end(); ++it) { qDebug() &lt;&lt; it.key() &lt;&lt; ":" &lt;&lt; it.value(); } ``...

    QT,QVector 基本用法,遍历[实例讲解] - 小皮球的博客 - CSDN博客1

    可以使用`append()`函数或`&lt;&lt;`操作符在QVector的末尾添加元素。例如: ``` QVector&lt;QString&gt; strArray; strArray.append("Hello"); strArray &lt;&lt; "World!" &lt;&lt; "MyName" &lt;&lt; "is" &lt;&lt; "LEO"; ``` 这些操作不会...

    由QMAP改写的简易CMAP类

    QMap&lt;KeyType, ValueType&gt; cmap; ``` 其中KeyType为键的类型,ValueType为值的类型。我们可以像操作数组一样通过键来获取或修改值: ```cpp cmap[key] = value; // 插入或更新键值对 value = cmap[key]; // 获取值...

    qt获取数据

    std::vector&lt;double&gt; data = mat.readVariable&lt;double&gt;(id); // 将数据转换并存储到Qt数据结构中 QList&lt;double&gt; qtList; for (double d : data) { qtList.append(d); } // ... } } } else { qDebug() &lt;&lt; ...

    Python库 | jkq.qmap-1.2.1.tar.gz

    例如,在Web开发中,后端服务器接收到前端的请求后,可以使用`jkq.qmap`来处理查询请求,快速返回所需的结果。或者在数据科学项目中,它可以作为数据预处理工具,帮助清洗和转换原始数据。 为了更好地利用`jkq.qmap...

    QT基本类型及使用说明

    - `QMapIterator&lt;&gt;`: 遍历映射表。 - `QMutableMapIterator&lt;&gt;`: 遍历并修改映射表。 - **QLinkedList**: - 链表容器,适合频繁的插入和删除操作。 - **QVariant**: - 用于存储多种数据类型。 - 示例:`...

    5_2StringList.zip

    `QStringList`是QT库中的一个类,继承自`QList&lt;QString&gt;`,它提供了许多方便的函数来处理字符串集合,如添加、删除、查找、排序和格式化字符串等。 首先,我们来看`QStringList`的基本用法。你可以通过初始化一个空...

    Qt实现统计文本出现最高频次的字符

    QMap&lt;QString, int&gt; charCount; for (auto c : inputText.toLower()) { if (c.isLetter()) { charCount[c]++; } } // 按出现频率排序并获取前三个 QSortFilterProxyModel proxyModel; proxyModel....

    QT2中文设置

    QMap&lt;QString, QIcon&gt; qmap; qmap.insert("中文图标1", QIcon("icon1.png")); qmap.insert("中文图标2", QIcon("icon2.png")); QIconViewItem *qiconitem[2]; qiconitem[0] = new QIconViewItem(iconview, "中文...

    Qjson 源代码以及编译好的库

    QMap&lt;QString, QVariant&gt; myMap; myMap["name"] = "Jane"; myMap["age"] = 28; myMap["city"] = "San Francisco"; QJsonDocument doc = QJsonDocument::fromVariant(myMap.toVariantMap()); QByteArray jsonData = ...

    文件读写实验

    QMap&lt;QString, QColor&gt; map; // ...插入数据到map... QFile file("facts.dat"); if (!file.open(QIODevice::WriteOnly)) { std::cerr &lt;&lt; "Cannot open file for writing: " &lt;&lt; qPrintable(file.errorString()) &lt;&lt; ...

    qt4中文教程学习笔记

    - `#include &lt;QApplication&gt;` 和 `#include &lt;QLabel&gt;` 这两行是必要的,因为它们包含了创建窗口所需的Qt类的定义。 - **主函数:** - `int main(int argc, char *argv[])` 是程序的入口点。 - **QApplication...

    androidnative.pri:在不使用JNI的情况下从Qt调用Android函数

    数据类型将自动转换(例如QMap &lt;-&gt; java.util.Map)。 无需用JNI编写。 它可以用来编写自己的Java代码 捆绑组件 图像选择器 吐司 视频选择器 SMS收件箱阅读器(通过Util组件) 拨打电话,makeCall(通过Util...

    QBencode:Qt 中的 Bencode 读写支持

    QMap&lt;QString, QVariant&gt; decodedData = decoder.decode(); ``` 5. **错误处理**:`QBencode` 提供了异常处理机制,当编码或解码过程中遇到问题时,会抛出异常。因此,在使用这些方法时,记得捕获可能的异常并...

    Qt程序,将三沙市的GeoJson格式数据转化为mif文件

    这些信息可以存储在QMap或QHash中,键为属性名,值为属性值。 4. **生成MIF文件**:MIF文件没有内置的Qt支持,所以你需要自己定义格式来写入文件。MIF文件由头部信息、几何数据和属性数据组成。你需要根据MIF格式...

    QT版拼音五笔获取

    在C#代码中,这部分可能使用了.NET Framework的内置数据结构,而在QT C++中,开发者可能需要自己实现或者使用QT提供的QHash或QMap等容器。 项目内附带的原始C#代码可以帮助理解原本的实现逻辑,这对于移植工作至关...

    map111111.zip

    在Qt中,可以使用QGeoCodingManager类来实现这些功能,这有助于将用户输入的地址与地图上的位置关联起来。 6. **路径规划与导航**: 如果定位系统包含了路径规划功能,那么可能涉及到QGeoRouteReply和...

    QT_MyMap-master.zip

    QT_MyMap-master.zip是一个与Qt框架相关的项目压缩包,主要涉及的是使用Qt库来实现一个自定义的地图应用。Qt是一个跨平台的应用程序开发框架,广泛用于创建图形用户界面和其他软件。这个项目的名字"QT_MyMap"暗示了...

    qt文档助手加载源码.zip

    - 实现文档搜索功能可能用到QLineEdit的信号槽机制,当用户输入关键词时,触发搜索请求,并通过某种数据结构(如QHash或QMap)存储和查找匹配项。 7. **多语言支持**: - Qt框架支持多语言,源码中可能会有处理...

    Qt中的C++技术

    - **性能优化**:理解Qt源码可以帮助开发者了解何时使用`QVector`而非`QList`,或者何时应该使用`QHash`而非`QMap`来提高性能。 通过深入学习Qt中的C++技术,开发者不仅能提升对C++语言的理解,还能掌握一种强大而...

Global site tag (gtag.js) - Google Analytics