无序的map
第一阶段,map不排序的倒序
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
struct greater2 {
bool operator()(const int& x, const int& y) const {
return true;
}
};
std::map<int, QString, greater2> map;
map.insert({2, "ddf"});
map.insert({1, "ddf"});
map.insert({3, "ddf"});
map.insert({4, "ddf"});
for(auto m : map)
qInfo() << m;
return 1;
}
输出结果:
std::pair(4,"ddf")
std::pair(3,"ddf")
std::pair(1,"ddf")
std::pair(2,"ddf")
第二阶段,unordered_map类
#include <QtDebug>
#include <unordered_map>
#include <map>
#include <string>
#include <iostream>
#include <QApplication>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
unordered_map<int, QString> map={{ 3, "fdd" },{ 1, "fdd" }, { 2, "fdd" }};//使用{}赋值
for(auto k : map)
qInfo() << k;
return 1;
}
输出结果:
std::pair(2,"fdd")
std::pair(1,"fdd")
std::pair(3,"fdd")
QMap的对应list
template<typename T>
class PairList : public QList<QPair<QString, T> >{
public:
bool contains(QString key) {
for(int k = 0; k < this->count(); k ++) {
if(this->at(k).first == key)
return true;
}
return false;
}
T value(const QString &key) {
for(int k = 0; k < this->count(); k ++) {
if(this->at(k).first == key)
return this->at(k).second;
}
return 0;
}
QString key(T obj){
for(int k = 0; k < this->count(); k ++) {
if(this->at(k).second == obj)
return this->at(k).first;
}
return "";
}
void append(QString key, T value ) {
this->insert(this->count(), QPair<QString ,T>(key, value));
}
};
typedef QPair<QString, QObject *> PairWidget;
typedef QPair<QString, QString> PairString;
typedef PairList<QObject *> PairWidgetList;
typedef PairList<QString> PairStringList;