mdfy

本文介绍了一种使用JSON和Boost.PTree库解析复杂数据的方法。通过示例代码展示了如何逐层访问并提取JSON数据中的特定字段,适用于需要处理多层次结构化数据的应用场景。

ptree p1,p2,p3;
   p1 = pt.get_child("deviece");//访问多级节点中的数组数据

   p2 = p1.begin()->second.begin()->second.begin()->second;
   string id_str = p2.get<string>("id");
   p3 = p2.get_child("dataItems").begin()->second.get_child("20000001").begin()->second;
   string TV = p3.get<string>("TV");
   string VA = p3.get<string>("VA");
   string VB = p3.get<string>("VB");
   string VC = p3.get<string>("VC");

 

string json_str = "{\"session\":\"a0011\",\"msgType\":\"req\",\"deviece\":[{\"device1\":[{\"id\":\"123\",\"dataItems\":[{\"20000001\":[{\"TV\":\"100.00\",\"VA\":\"65.30\",\"VB\":\"56.85\",\"VC\":\"120.30\"}]}]}]}]}";

 

list<dataitem_info> DataManager::GetDataItems_Cpp(string json_str , ptree xml_ptree)
{
 list<dataitem_info> di_list;

 try
 {
  Json::Reader reader;
  Json::Value root;

  if(reader.parse(json_str,root))
  {
   Json::Value dvc = root["deviece"];
   for(Json::Value::iterator v = dvc.begin();v!=dvc.end();v++)   
   {
    Json::Value dvs = (*v);
    for(Json::Value::iterator v1 = dvs.begin();v1!=dvs.end();v1++)//device1,device2...
    { 
     Json::Value dvs_in = (*v1);

     for(Json::Value::iterator v2 = dvs_in.begin();v2!=dvs_in.end();v2++)
     {
      string id_str = (*v2)["id"].asString();
      Json::Value dataItems = (*v2)["dataItems"];
      
      for(Json::Value::iterator v3 = dataItems.begin();v3!=dataItems.end();v3++)
      {
       Json::Value dataItems_in = (*v3);
       
       for(Json::Value::iterator v4 = dataItems_in.begin();v4!=dataItems_in.end();v4++)
       {
        string optStr = v4.memberName();
        Json::Value db_keys = (*v4);

        for(Json::Value::iterator v5 = db_keys.begin();v5!=db_keys.end();v5++)
        {
         Json::Value db_keys_in = (*v5); 
         
         for(Json::Value::iterator v6 = db_keys_in.begin();v6!=db_keys_in.end();v6++)
         {
          string db_name = v6.memberName();
         }
        }
       }
      }
     }
    }
   }
  }

 }
 catch (std::exception& e)
 {
  std::cout << "Error: " << e.what() << "\n";
 }

 return di_list;
}

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int M = 998244353; ll n, q; int r1, c1, r2, c2; int op, k, c, v; int f(int k, int i, int j) { return 2 * ((i >> k) & 1) + ((j >> k) & 1); } int chk(const vector<vector<int>>& a, int i, int j, int n) { int anss = 0; for (int k = 0; k < n; ++k) { anss = (anss + a[k][f(k, i, j)]) % M; } return anss; } vector<vector<int>> pls(const vector<vector<int>>& a, int n) { int kk = 1 << n; vector<vector<int>> m(kk, vector<int>(kk, 0)); vector<vector<int>> ps(kk + 1, vector<int>(kk + 1, 0)); for (int i = 0; i < kk; ++i) { for (int j = 0; j < kk; ++j) { m[i][j] = chk(a, i, j, n); } } for (int i = 1; i <= kk; ++i) { for (int j = 1; j <= kk; ++j) { ps[i][j] = (ps[i - 1][j] + ps[i][j - 1] - ps[i - 1][j - 1] + m[i - 1][j - 1]) % M; if (ps[i][j] < 0){ ps[i][j] += M; } } } return ps; } vector<vector<int>> mdfy(vector<vector<int>> a, int k, int c, int v) { a[k][c] = v; return a; } int que(const vector<vector<int>>& ps, int r1, int c1, int r2, int c2) { return (ps[r2 + 1][c2 + 1] - ps[r1][c2 + 1] - ps[r2 + 1][c1] + ps[r1][c1]) % M; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; vector<vector<int>> a(n, vector<int>(4)); for (int i = 0; i < n; ++i) { for (int j = 0; j < 4; ++j) { cin >> a[i][j]; } } cin >> q; vector<vector<int>> ps = pls(a, n); for (int i = 0; i < q; ++i) { cin >> op; if (op == 1) { cin >> k >> c >> v; a = mdfy(a, k, c, v); ps = pls(a, n); } else { cin >> r1 >> c1 >> r2 >> c2; int ans = que(ps, r1, c1, r2, c2); if(ans < 0){ ans += M; } cout << ans << "\n"; } } return 0; } RE+WA0
最新发布
09-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值