我有一个QMap对象,我正在尝试将其内容写入文件.
QMap<QString, QString> extensions;
//..
for(auto e : extensions)
{
fout << e.first << "," << e.second << '\n';
}
Run Code Online (Sandbox Code Playgroud)
为什么我得到: error: 'class QString' has no member named 'first' nor 'second'
是e不是类型QPair?
#include <QtCore/QCoreApplication>
#include <QVariant>
#include <QtDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVariantMap map;
map["foo"] = QVariant(QVariantMap());
map["baz"] = "asdf";
qvariant_cast<QVariantMap>(map["foo"])["bar"] = "a";
qDebug() << qvariant_cast<QVariantMap>(map["foo"])["bar"].toString();
qDebug() << map["baz"].toString();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
我试图在嵌套的QVariantMap中分配一个QVariant.第一个qDebug()不输出任何内容,但第二个输出"asdf"如预期的那样.如何将嵌套变量映射中的"bar"键分配给值?
我有一个QMap包含指向类对象的指针,使用分配new.我需要删除所有这些指针.使用QMap进行此操作的正确方法是什么?我可以这样做:
QList<ClassName*> allVals = map.values();
for (QList<ClassName*>::iterator it = allVals.begin(), endIt = allVals.end(); it != endIt; ++it) {
delete *it;
}
Run Code Online (Sandbox Code Playgroud)
但有没有更好的方法做同样的事情?
我无法找到一种方法来设置自定义比较器函数QMap,就像我可以std::map(typename _Compare = std::less<_Key>它的模板参数的一部分).
有QMap没有办法设置一个?
我经常看到如下代码:
if(myQMap.contains("my key")){
myValue = myQMap["my key"];
}
Run Code Online (Sandbox Code Playgroud)
理论上它在QMap中执行两次查找.
我的第一反应是它应该由以下代替,它只执行一次查找,应该快两倍:
auto it = myQMap.find("my key");
if(it != myQMap.end()){
myValue = it.value();
}
Run Code Online (Sandbox Code Playgroud)
我想知道QMap是否会自动为我做这个优化?换句话说,我想知道QMap是否保存了找到的最后一个元素的位置QMap::contains()并在执行下一次查找之前先检查它?
一般来说,深度复制Qt容器的正确方法是什么?我并不担心递归地深度复制容器,尽管解决这些问题会有所帮助.
我觉得为什么QMap实现了跳过列表数据结构而不是rb-tree?有关并发数据结构和跳过列表优势的非常有趣的SO线程比rb-tree,优点和缺点.它确实是非常有用的链接,但QMap不是线程安全的,它不会进行任何互斥锁定,以便开箱即用同步访问.它需要包装或子类化.
对我来说,编写"手工制作"的滑雪列表而不是rb-tree并不简单,所以这也不是很明显.
在非线程安全的Qt容器的上下文中是否有任何kill-feature?
Tnx提前.
我应该在QMap :: insertMulti和QMultiMap之间使用什么来处理:
2 - > abc
2 - > def
3 - > ghi
3 - > jkl
进入2个解决方案的区别是什么?
我想知道对Qt容器内的值的引用有多长,特别是a QHash或a QMap是有效的.有效我的意思是,如果在插入或删除其他元素后仍保证指向map/hash中的正确位置.
让我们以下代码:
QHash<char,int> dict; // or QMap<char,int> dict;
dict.insert('a', 1);
int& val(dict['a']);
dict.insert('b', 2);
val = 3; // < will this work or lead to a segfault
Run Code Online (Sandbox Code Playgroud)
将在最后一行的值设置正确地更新与相关联的值a来3还是会导致段错误还是会是不确定的(所以有时候工作,段错误其他时间,具体取决于数据结构是否必须进行内部重组,像调整散列表数组).是行为同为QMap和QHash,或将一个工作和其他不?
我需要像 QMap 这样的结构,但不需要对键进行排序,所以如果我先在那里插入项目,我可以算出该项目将位于所有其他项目之前。并在指定元素之前或之后插入对。Qt有这样的吗?