有一个QMap<QString,qreal> map,存储的数据为名字对应值,如: apple -> 12.2 , orange-> 23.3,banana->10.5。 现在需要按照map元素值的升序的顺序获取QMap中的所有元素。
也就是希望获得的结果是:banana,10.5 -> apple,12.2 -> orange,23.3 。
qSort可以实现对容器排序,但是无法对QMap使用qSort。
我们可以先将QMap中的元素放入到QVector,然后再对QVector进行排序,最终获得排序后的数据。
为了更好理解,程序中将map元素的数据类型定义为fruit。
排序的关键在于qSort第三个参数的编写,它是一个函数,用来判断元素的大小。 为了方便 这里使用了lambda表达式。
程序输出结果:
https://www.fearlazy.com/post/268.html需求:有一个QMap<QString,qreal> map,存储的数据为名字对应值,如: apple -> 12.2 , orange-> 23.3,banana->10.5。 现在需要按照map元素值的升序的顺序获取QMap中的所有元素。也就是希望获得的结果是:banana,10.5 -> apple,12.2 -> orange,23.3 。方法:qSort可..
QMap
<int, QString> mapTest_;
mapTest_.insert(1, "1111"); //直接插入
mapTest_[2] = "2222"; //另一种方式的插入
if(!mapT...
operator<()
QMap
’s key type must provide operator<().
QMap
uses it to keep its items sorted, and assumes that two keys x and y are equal if neither x < y nor y < x is true.
Qt帮助文档给的例子:
#ifnd
QMap
原型为class
QMap
<K,T>,其中K表示键,T表示值,K和T属于映射关系.
QMap
会根据K来自动进行升序键
排序
QMap
中的K类型必须重载operator <
QMap
常用函数如下:
const Key
QMap
::key ( const T &
value
);
//通过值来找键,若未找到则返回0,由于只对K键进行
排序
,所以该函数不是快速查找
const T
QMap
::
value
( c
一文总结Qt关联式容器类—
QMap
QMap
是一个模板类,它提供了一个基于红黑树的字典。
QMap
<Key, T>是Qt的一个通用容器类。它存储(键、值)对,并提供与键关联的值的快速查找方法。
QMap
和QHash具有非常类似的功能。两者的差异是:QHash提供了比
QMap
更快的平均查找速度。在遍历QHash时,项目是任意
排序
的。使用
QMap
,项目按键
排序
的。
二、
QMap
的使用方法
(2-1)创建
QMap
。
例如:
QMap
<QString,int>map;
QMap
<T1,T2> map1
T1为键值对中的键key,T2为键值对中的值。通过键值对中的键可以搜索到值。一般来说,键值对中的键是唯一的,不可重复,而值没有要求,可以重复。并且
QMap
具有自动
排序
功能,对输入的键进行
排序
。
1.2下面是一...
1、
QMap
插入后再遍历是按照key的顺序来
排序
的(汉字除外,汉字的
排序
顺序很奇怪,不是正常的字母顺序);2、QHash插入后再遍历是没有顺序的;3、如果想按照插入顺序记录,可使用这样的结构:QList> pairs;可以用这样的方式取数据:
QString first
Value
= pairs.at(0).first;
QString second
Value
= pairs.at(0).se
int
value
= myMap.
value
("pear", ); // 如果pear不存在,
value
的值为
以上就是使用
QMap
根据key查找
value
的方法。
### 回答2:
Qt是一个跨平台的C++框架,提供了丰富的库函数和工具,其中之一就是
QMap
。
QMap
是Qt的一个关联容器,允许以key-
value
对的形式存储和查找数据。在
QMap
中,key和
value
都可以是任何支持复制语义和小于比较的类型,例如基本数据类型、QString和自定义类。
QMap
支持多种方式查找
value
,最常见的是根据key查找。为了根据key查找
value
,我们可以使用
value
()函数、operator[]运算符或find()函数。使用这些函数进行查找时,会自动按key的大小
排序
,因此查找速度相对较快。
value
():
value
()函数根据key在
QMap
中查找
value
,如果存在该key则返回对应的
value
,否则返回一个默认值。
value
()函数有两种重载形式:
- const T &
value
(const Key &key, const T &default
Value
= T()) const;
- const T
value
(const Key &key, const T &default
Value
= T()) const;
第一个重载形式返回一个const引用,如果找到了对应的
value
,则返回该
value
的const引用;否则返回default
Value
。第二个重载形式返回一个const副本,找到对应的
value
则返回该
value
的const副本;否则返回default
Value
的const副本。
例如,以下代码演示了如何使用
value
()函数查找
value
:
QMap
<QString, int> map;
map.insert("apple", 20);
map.insert("banana", 30);
map.insert("orange", 40);
int appleCount = map.
value
("apple", 0); // appleCount = 20
int pearCount = map.
value
("pear", 0); // pearCount = 0
operator[]:
operator[]运算符根据key在
QMap
中查找
value
,如果找到了对应的
value
则返回
value
的引用;否则插入一对key-
value
并返回
value
的引用,其值为默认值。因此,使用operator[]运算符可以实现在
QMap
中添加key-
value
对的操作。
例如,以下代码演示了如何使用operator[]运算符添加key-
value
对或查找
value
:
QMap
<QString, int> map;
map["apple"] = 20;
map["banana"] = 30;
int appleCount = map["apple"]; // appleCount = 20
map["orange"] = 40;
find():
find()函数同样根据key在
QMap
中查找
value
,如果找到了对应的
value
则返回
value
的迭代器;否则返回
QMap
::end()迭代器。因此,可以使用find()函数进行迭代器遍历查找,也可以使用constFind()函数查找const迭代器。
例如,以下代码演示了如何使用constFind()函数查找
value
:
const
QMap
<QString, int> map{{"apple", 20}, {"banana", 30}, {"orange", 40}};
auto iter = map.constFind("apple");
if (iter != map.constEnd()) {
int appleCount = iter.
value
(); // appleCount = 20
总之,
QMap
提供了三种方式(
value
()、operator[]和find())根据key查找
value
,可以根据具体情况选择最合适的函数进行操作。
### 回答3:
Qt
QMap
是一种键值对映射的数据结构,它将一个键映射到一个值,我们可以使用键来查找对应的值。在Qt中,
QMap
是常用的数据结构之一,通过它,我们可以快速地根据key查找到对应的
value
。
在
QMap
中,我们可以使用以下方法来查找
value
:
1.使用
value
()方法:该方法会返回
QMap
中指定key所关联的
value
。如果key不存在于
QMap
中,则该方法会返回默认构造的
value
。
```c++
QMap
<QString, int> map;
map.insert("a", 1);
map.insert("b", 2);
int
value
1 = map.
value
("a"); //
value
1的值为1
int
value
2 = map.
value
("c"); //
value
2的值为0,因为"c"不存在于
QMap
中,使用默认构造的
value
int
value
3 = map.
value
("c", 3); //
value
3的值为3,因为"c"不存在于
QMap
中,使用指定的默认值3
2.使用[]操作符:我们也可以使用[]操作符来根据key查找
value
。在
QMap
中,如果我们使用[]操作符访问一个不存在的key,则会自动创建一个新的key,并将其
value
初始化为默认值。
```c++
QMap
<QString, int> map;
map.insert("a", 1);
map.insert("b", 2);
int
value
1 = map["a"]; //
value
1的值为1
int
value
2 = map["c"]; //
value
2的值为0,因为"c"不存在于
QMap
中,使用默认构造的
value
map["c"] = 3; // 自动创建新的key "c",并将其
value
设为3
总的来说,
QMap
提供了多种方式来根据key查找
value
,开发者可以根据实际情况选择适合自己的方式来进行操作。在使用
QMap
时,需要注意避免重复插入相同的key,否则会导致数据错误。