二维unordered_map

2024-01-18

typedef boost::unordered_map<int, void*> OneDimentionalNodes;
typedef boost::unordered_map<int, OneDimentionalNodes> TwoDimentionalNodes;

TwoDimentionalNodes nodes;

这是有效的吗?

我不使用任何哈希函数,因为 unordered_maps 的键是单个整数。 它可以编译,但是当我像这样迭代它时,它在尝试访问 this->hash_function()(k); 时崩溃。

for (TwoDimentionalNodes::iterator it= nodes.begin(); it != nodes.end() ; ++it)
{
   for(OneDimentionalNodes::iterator it2 = nodes[it->first].begin(); it2 != nodes[it->first].end() ; ++it2)
    {
   // do stuff
    }
}

我也对其他容器开放

  • O(1) 访问
  • O(n) 迭代
  • Sparse

如果您只需要迭代所有元素,并且不需要循环特定维度,那么您可以使用一个简单的对作为 unordered_map 的键,如下所示:

typedef std::pair<int,int> Coordinates;
typedef std::unordered_map<Coordinates,void *> TwoDimensionalNodes;

(请注意,我使用了 STL 而不是 Boost,unordered_map 现在也是标准 STL 的一部分)。

获取特定值只需编写:

twoDimensionalNodes[std::make_pair(x,y)]

(如果您不确定该值是否在您的地图中,请使用 find )。

要进行迭代,只需迭代无序映射即可:

for (auto it=twoDimensionalNodes.begin();it!=twoDimensionalNodes.end();++it)
   {
   std::cout << "x=" << it->first.first;
   std::cout << "y=" << it->first.second;
   std::cout << "value=" << it->second;
   }

为了使其更具可读性,我更喜欢首先从迭代器获取坐标,如下所示:

for (auto it=twoDimensionalNodes.begin();it!=twoDimensionalNodes.end();++it)
   {
   Coordinates &coordinates = it->first;
   std::cout << "x=" << coordinates.first;
   std::cout << "y=" << coordinates.second;
   std::cout << "value=" << it->second;
   }

如果您的维度超过 2 个,请使用 std::tuple,或者只需编写您自己的坐标类作为地图的键。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二维unordered_map 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 修改foreach循环中的数组值[重复]

    这个问题在这里已经有答案了 我想知道是否可以编辑正在处理的当前对象foreach loop 我正在处理一系列对象 questions我想在我的数据库中浏览并查找与该问题对象相关的答案 因此 对于每个问题 获取答案对象并更新当前的 quest
  • 在显示表格单元格中使用边距[重复]

    这个问题在这里已经有答案了 我尝试在 li 中添加 margin left margin right 但它没有给它们之间留出空间 我应该添加什么来在列表之间留出一个空格 CSS btn top float right height 40px
  • Windows Azure 开发存储 Blob 服务未启动

    当我启动开发存储模拟器时 出现错误 The process cannot access the file because it is being used by another process 我猜这只发生在 BLOB 上 其他服务 即队列
  • 每次操作后的 MySQL SUM 和 MIN

    考虑以下表结构 Quantity BaseValue Id 0 3 1 1 0 8 1 2 0 5 1 3 0 2 1 4 假设这是一张表 名为Transactions 有什么方法可以对此表进行选择查询 它将对表中的值进行求和Quantit
  • Glibc 字符串操作函数的算法复杂度

    我意识到 Glibc 源代码经过了极其优化 并且是手工编码的汇编 是否有任何文档分析了常用字符串操作函数的算法复杂性 Big O 例如strmcp strncmp etc 可能没有这方面的文档 因为它很简单 其复杂度为 O n strcmp
  • 删除...创建与更改

    当涉及到创建存储过程 视图 函数等时 对对象执行 DROP CREATE 或 ALTER 哪个更好 我见过许多 标准 文档声称要执行 DROP CREATE 但我也见过许多提倡使用 ALTER 方法的评论和争论 ALTER 方法保留了安全性
  • 如何设置 HttpURLConnection 的内容类型?

    你知道如何设置吗Content Type on HttpURL连接 http developer android com reference java net HttpURLConnection html 以下代码适用于 Blackberr
  • 范围或地图返回什么?

    Go 有非常简洁的多返回值范例 但看起来像v ok map key and v k range m使用具有相同符号的不同机制 这是一个简单的例子 func f2 k v string return Hello World func main
  • Firebase - 应用程序分发无法获取应用程序信息:[403]调用者没有权限[重复]

    这个问题在这里已经有答案了 我正在使用 gradle 开发 Firebase App Distribution 我已经遵循了此中的所有步骤firebase 官方链接 https firebase google com docs app di
  • 修复 COM 引用:类型库导入程序无法转换成员 DISPPARAMS.rgvarg 的签名

    我有一个构建服务器 我在其中构建 Visual Studio 扩展 我最近迁移到另一台服务器 现在我收到以下警告 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common t
  • 在 Eclipse 中调试时如何跳过 JRE 代码?

    在 Eclipse 中调试时 我单步执行 F5 语句 如下所示 encryptedBytes LightWeightEncryptor encrypt messageBytes password toCharArray 调试器进入 JRE
  • 从逗号分隔的字符串中批量插入

    我有一个表 其中一列包含以下数据 abc 2 2 34 5 3 2 34 32 2 3 2 2 def 2 2 34 5 3 2 34 32 2 3 2 2 我想获取这些数据并将其插入到另一个表中 使用逗号作为分隔符 就像您可以指定FIEL
  • C# TCP 套接字错误 - 10060

    我有一个 Windows 服务作为服务器 我以 localhost 作为客户端运行一个 Windows 窗体应用程序 这两个程序都使用 TCP 套接字连接来发送 接收数据 服务器侦听端口 8030 程序运行正常 但是 当我增强客户端程序以在
  • 在画布上手动逐像素绘制一个圆圈[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试做一些复杂的效果 为了做到这一点 我必须将其分解为各个组件 我可以在此基础上进行构建 并希望它们能够组合在一起 现在在画布上画一个
  • 浏览器将边框值截断为整数

    每当非整数像素值用于元素的边框时 浏览器都会将该值截断为整数 为什么会这样呢 我知道边境不会actually占用像素的一部分 但这些类型的值有时与其他值结合使用以形成完整像素 例如 宽度为 1 6px 的左右边框应导致元素的总宽度增加 3p
  • Console.Clear() 闪烁

    while true Console Clear for int row 0 row lt 50 row for int col 0 col lt 50 col Console Write world row col Console Wri
  • 当原始对象更改时,绑定不会更新

    我想我误解了 Angular 中数据绑定和作用域的工作原理 或者我对 Javascript 有一些误解 我希望有人能帮助我 假设我有一个工厂 它有一个对象 并为其定义了一个 getter setter app factory myFacto
  • Tkinter 滚动条不滚动

    我正在尝试创建一个带有两个画布和一个滚动条的图形用户界面 同时穿过这两个画布 作为另一个项目的测试 我创建了根 两个画布 并使用网格方法将一些标签固定到每个画布上 并创建了滚动条 但是 当我运行该程序时 滚动条会移动 但窗口的内容根本没有改
  • 在 Java 中管理 XAdES 签名的库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个允许创建和验证 XAdES 签名的 Java 库 格式越多越好 XAdES BES XAd
  • 二维unordered_map

    typedef boost unordered map