在QMap的特定偏移处获取项目

时间:2016-05-12 11:08:26

标签: c++ qt qmap

我有一个代表数据库行的QMap。这些项目按列名索引:

QMap<QString, QVariant> mapOfItems_;

然后我有一个按列名称检索项目的方法:

QVariant ImportDataSourceRow::byName( const QString& name )
{
    if(mapOfItems_.contains(name))
      return mapOfItems_.value(name);
    else
      throw NoSuchColumn();
}

我还想实现方法来逐列索引(0为第一列):

QVariant ImportDataSourceRow::byIndex( size_t index )
{
    // Now what?
}

如何从地图获取偏移量index的值? QMap是否保证按照我的要求订购?

2 个答案:

答案 0 :(得分:1)

QMap的条目保证按键排序,在您的情况下,QString :: operator&lt;。

要获取地图内的位置,您可以使用:

FINDID  SUPPLIERID  SUPPLIERSKU PRICE   FROM_DATE               NEW_TO_DATE             IDENTIFY
1000001 1001        012RE0020   4.0000  2016-05-12 06:49:40.000 2016-05-12 07:16:23.000 0
1000001 1001        012RE0020   4.0000  2016-05-12 07:16:24.000 2016-05-12 07:52:54.000 0
1000001 1001        012RE0020   5.0000  2016-05-12 07:52:55.000 9999-12-31 00:00:00.000 1
1000002 1001        101ME0320   21.0000 2016-05-12 06:49:40.000 2016-05-12 07:16:23.000 0
1000002 1001        101ME0320   21.0000 2016-05-12 07:16:24.000 2016-05-12 07:33:37.000 0
1000002 1001        101ME0320   26.0000 2016-05-12 07:33:38.000 2016-05-12 07:52:54.000 0
1000002 1001        101ME0320   27.0000 2016-05-12 07:52:55.000 9999-12-31 00:00:00.000 1

请注意,如果使用constFind()并且返回的迭代器等于mapOfItems.constEnd()而不是执行两次查找(contains和value()),则byName()方法会更有效。

答案 1 :(得分:0)

不推荐,但您可以尝试这样做:

QList<QString> list = mapOfItems_.values();
if(index>=0 && index<list.count()) return list.at(index);
return QString();

不知道它如何与QVariant一起使用。