首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMap和QPair,C++,Qt

问QMap和QPair,C++,Qt
EN

Stack Overflow用户
提问于 2011-10-04 09:38:49
回答 3查看 9.2K关注 0票数 8

我想通过两种方式创建一个访问字符串的数据结构:

  1. 按ID访问
  2. 按名称访问

我的第一个想法是为每个方法使用两个映射,但这会导致数据的重复:

代码语言:javascript
复制
QMap<int, QString> accessById;
QMap<QString, QString> accessByName;

我在寻找更好的方法,就像这样:

代码语言:javascript
复制
QMap<QPair<int, QString>, QString> multiAccess;

但是它帮不了我(至少我不知道怎么做),因为在地图中搜索需要知道ID和名字。我如何定义一个良好的Qt类结构来实现我的目标?

没有外部库,但Qt

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-04 09:51:20

不如:

代码语言:javascript
复制
QMap<QString, int> nameIdMap;
QMap<int, QString> accessById;

您可以通过id访问并创建名称和id的映射。然后,您可以按名称访问

代码语言:javascript
复制
QString data = accessById[nameIdMap[the_name]];
票数 4
EN

Stack Overflow用户

发布于 2011-10-04 10:04:53

由于“隐式共享”,Qt没有其他类库那么担心数据的复制:

http://doc.qt.nokia.com/latest/implicit-sharing.html

具有此属性(包括QString)的类的列表将在该链接中涵盖。还有一些帮助程序可以创建您自己的类,这些类也使用了一种复制即写策略:

http://en.wikipedia.org/wiki/Copy-on-write

http://doc.qt.nokia.com/latest/qshareddatapointer.html#details

总结一下:如果您有一个10,000个字符的QString并将其赋值给另一个QString变量,那么您将不会为另外10,000个字符的存储支付费用(除非您修改了两个实例之一的字符串数据)。不过,即使是只读QString句柄也比int大一点.这取决于您的场景,与多个查找的速度权衡相比,这种大小差异是否显著,就像@Juho提供的策略一样。

票数 4
EN

Stack Overflow用户

发布于 2011-10-04 12:15:30

您可以使用Boost Bimap,它将在id和Name之间创建一个双向映射。

代码语言:javascript
复制
boost::bimap<int, QString> idNameBimap;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7645914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档