首页 / 知识
关于C#:最佳的双索引容器
2023-04-17 06:45:00

Best container for double-indexing设置容器中允许双索引的最佳方法(在C中)是什么?具体来说,我有一个对象列表,每个对象由一个键索引(每个键可能有多个)。这意味着多图。但是,这样做的问题是,这可能意味着查找对象的位置可能要比线性查找差。我宁愿避免重复数据,因此让每个对象保持其自身的坐标并不得不在地图中移动会很不好(更不用说在对象函数中移动自己的对象可能会间接调用析构函数!)。我希望有一个容器可以通过对象指针和坐标维护索引,并且对象本身可以保证稳定的引用/指针。然后,每个对象可以将迭代器存储到索引(包括坐标)中,并进行足够抽象,然后知道它在哪里。 Boost.MultiIndex似乎是最好的主意,但它非常令人恐惧,我也不想浪费我的实际对象必须是const。 您会推荐什么? 编辑:Boost Bimap看起来不错,但是它提供稳定的索引编制吗?也就是说,如果更改坐标,则对其他元素的引用必须保持有效。我之所以要使用指针进行索引,是因为对象没有其他固有的顺序,并且在对象更改时指针可以保持不变(允许在Boost MultiIndex中使用,IIRC确实提供了稳定的索引)。 我正在根据您的文章做出几个假设:
我建议:
由于您的文章提到"坐标"作为键,因此您可能也有兴趣阅读"最快"方法的建议,以查找是否已使用3D坐标。 一种选择是使用两个引用shared_ptrs的std :: maps。像这样的事情可能会让你前进:
编辑:我刚刚注意到多图的要求,它仍然表达了这个主意,因此我将其保留。 很难理解您到底在用它做什么,但似乎boost bimap是您想要的。除了特定的用例外,它基本上可以提高多索引的使用率,并且更易于使用。它允许基于第一个元素或第二个元素进行快速查找。为什么要通过对象的地址查找对象在地图中的位置?使用抽象,让它为您完成所有工作。只需注意一下:映射中所有元素的迭代为O(N),因此可以保证O(N)(不会更糟)查找您正在考虑的方式。 |
最新内容
相关内容
linux使用索引命令?
linux使用索引命令?,名称,系统,命令,文件,环境,工作,位置,目录,文件名,索引,在linux中如何用命令查找文件在哪1、使用查找命令 “find”命令允linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操linux磁盘列表命令?
linux磁盘列表命令?,情况,管理,系统,单位,信息,数据,命令,磁盘,服务,时间,linux的进入磁盘命令1、查看磁盘空间 -df df命令以磁盘分区为单位查linux命令筛选列表?
linux命令筛选列表?,工具,状态,位置,工作,预期,命令,名称,标准,数据,系统,在Linux下面的某一个文件的查找命令linux命令如果记不得,可以使用manlinux的长列表命令?
linux的长列表命令?,工作,系统,信息,命令,数据,目录,电脑,软件,时间,设备,Linux命令行大全的目录1、linux系统常用操作命令linux系统常用操作linux刷新索引的命令?
linux刷新索引的命令?,系统,工作,工具,管理,软件,设计,状态,基础,命令,预期,【Linux操作】---终端神器tmux一般使用命令和快捷键进行操作,可在linux目录列表命令?
linux目录列表命令?,系统,信息,标准,工作,命令,地址,时间,数据,名称,目录,linux查看目录下文件的命令linux系统下用ls命令列出当前目录下的文linux命令输入方法?
linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,linux终端输入~怎么弄中间在电脑上打开需要的Word文件进入。进入到文Python中什么是反射?使用方法有哪
Python中什么是反射?使用方法有哪些?,信息,培训,状态,术语,检测,反射,属性,对象,字符串,方法,反射这个术语在很多语言中都存在,并且存在大量的Python中有哪些方法可以解压文件?
Python中有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大总结python 元组和列表的区别
总结python 元组和列表的区别,培训,列表,括号,切片,包裹,两者,实例,元素,区别,操作,python的基本类型中有元组和列表这么俩个,但是这哥俩却比