我有以下数据集:
QSet<QString> set;我尝试在QSet中插入3个元素。
set.insert("A");
set.insert("B");
set.insert("C");添加上述三个元素后,它显示我的QSet的大小为3,但总共有16个元素可见,其中13个元素显示为空。每次我尝试调试的时候,元素"A“会出现在列表的顶部,下一次,"C”会出现在列表的顶部。
因此,我无法检索QSet. I want to retrieve the element,which is inserted at the last to theQSet的最后一个元素。
我使用以下几行代码来检索和删除QSet中的元素。
QString str1 = QString( *( set.end() - 1 ) ); //to get the last element
set.remove( *( set.end() - 1 ) ); //to remove the last element我认为,它必须正确初始化我的QSet,但我仍然不能准确地解决问题
如果有人能给我更好的解释,我会很高兴的,谢谢!
发布于 2018-05-04 22:20:19
QSet不以任何特定的顺序存储它的元素。正如您已经注意到的,在程序的两次运行之间,没有特定的顺序甚至是不稳定的。在非常真实的意义上,没有“最后一个元素”,这就是为什么没有front或back成员
插入的顺序不会记录在任何地方。如果要保持插入顺序,则需要SequenceContainer,如std::vector或QVector。
发布于 2018-05-04 22:04:03
QSet基于哈希表,因此是无序的。如果您需要按键排序,请使用QMap。
https://stackoverflow.com/questions/50176576
复制相似问题