多维锯齿状地图

multidimensional jagged map

本文关键字:地图 锯齿状      更新时间:2023-10-16

我是一个 c++ 菜鸟,试图构建一个实时跟踪我所有资产和负债的个人理财 websocket 服务器。

我发现我可以map map s拥有一个键值对的多维系统。

我还发现boost::anyboost::variant可用于存储值的多种类型。 我的问题是,与其他级别相比,某些级别不是很复杂。 例如,银行账户只有一个值,即账户中的金额,而经纪账户将具有多种类型的投资和特征,所以我想做一些类似的事情(在 json 中):

{
    'bankAccount': 100.00,
    'brokerageAccount': {
        'stocks': {
            'companyName': 'Stack Exchange',
            'ticker': 'STAK',
            'pps': bazillion
            ...

bankAccountbrokerageAccount可以在需要时inserterase,并在必要时丢弃。

我真的不知道该何去何从。 当我尝试把

map<string, boost::any> accounts;
accounts["cash"] = 100;
accounts["brokerageAccount"] = map<string, boost::any>;

在此 WebSocket 服务器中broadcast_serverprivate部分中,使用这些标志gcc -I ~/websocketpp-master/ -std=c++0x -D_WEBSOCKETPP_CPP11_STL_ -D_WEBSOCKETPP_NO_CPP11_REGEX_ -lboost_regex -lboost_system -L/usr/lib -pthread -O0 -ljson_spirit为最后两行提供error: ‘accounts’ does not name a type

如何最好地以上面的 json 类型方式存储数据,并能够在任何地方添加和删除键和值?

accounts["brokerageAccount"] = map<string, boost::any>;

不能为对象指定类型。要解决问题,请添加 ()

accounts["brokerageAccount"] = map<string, boost::any>();

应该正确编译的变体是:

#include <boost/any.hpp>
#include <map>
#include <string>
int main()
{
   std::map<std::string, boost::any> accounts;
   accounts["cash"] = 100;
   accounts["brokerageAccount"] = std::map<std::string, boost::any>();
}

最后一行的map<string, boost::any>是一个类型,而不是该类型的对象。 您必须调用该类型的构造函数才能创建参数。 将最后一行更改为

accounts["brokerageAccount"] = map<string, boost::any>();

这在我的Visual Studio 2010副本上修复了它