c++ - 设置/访问使用 map<string, boost::any> 制作的锯齿状 map 值

标签 c++ dictionary jagged-arrays boost-any json-spirit

我去过 shown how to create a jagged multidimensional std::map by using boost::any .

但是,我无法像 this answer 中那样设置值.

当我使用

accounts["bank"]["cash"] = 100;

gcc 给出这个错误

error: no match for ‘operator[]’ in ‘accounts.std::map<_Key, _Tp, _Compare, 
_Alloc>::operator[]<std::basic_string<char>, boost::any, 
std::less<std::basic_string<char> >, std::allocator<std::pair<const 
std::basic_string<char>, boost::any> > >((* & std::basic_string<char>(((const 
char*)"bank"), (*(const std::allocator<char>*)(& std::allocator<char>())))))["cash"]’

如何访问使用 boost::any 创建的锯齿状多维 map? (如果有更好的技术来做到这一点,请告诉我。我只关心什么有效并且可以快速编写。)

多维声明

std::map<std::string, boost::any> accounts;
accounts["bank"] = std::map<std::string, boost::any>();
accounts["bank"]["cash"] = 100;

json-spirit

我放弃并尝试使用 json-spirit 的 mObject 来代替,因为所有这些似乎都已经内置了。

有趣的是,使用完全相同的符号,我得到完全相同的错误。

最佳答案

std::map<std::string, boost::any> accounts;
accounts["bank"] = std::map<std::string, boost::any>();
accounts["bank"]["cash"] = 100;

当然这会导致编译时错误,你把它放到 boost::any std::map, 但是编译器对此一无所知。 accounts["bank"] 有 "boost::any"类型, 和 boost::any 没有

int& operator[](const char *)

阅读 boost::any 的工作原理:http://www.boost.org/doc/libs/1_54_0/doc/html/any/s02.html

修复很简单:

#include <boost/any.hpp>
#include <map>
#include <string>

int main()
{
  std::map<std::string, boost::any> accounts;
  accounts["cash"] = 100;
  accounts["bank"] = std::map<std::string, boost::any>();
  boost::any_cast<std::map<std::string, boost::any> &>(accounts["bank"])["cash"] = 100;
}

关于c++ - 设置/访问使用 map<string, boost::any> 制作的锯齿状 map 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808339/

相关文章:

java - 如何处理对象数组的对象数组

c++ - 为什么C++可以使用未初始化的成员变量(引用或指针*NOT value copy*)来初始化其父类的成员变量

c++ - boost 库构建 - 运行时链接和链接选项之间的区别

c++ - 当我调用 std::abort() 时,未显示 cout

c# - 从 AutoMapper 定义的映射中获取所有定义的映射

arrays - Julia:计算数组数组中元素的总数

.net - 锯齿状数组<-> ASP.NET 中的多维数组转换

c++ - 如何将 A<B<T>>* 解释为 A<C<T>>* 其中 B : public C<T>?

元组类型的 Java 字典值

python - 如何以最简单的方式获取以下字典?