当前位置: 首页 > news >正文

鲜花网站建设介绍类网站建设

鲜花网站建设介绍,类网站建设,上海网站搭建公司哪家好,校园网站建设培训一、数据的整合 在实际的开发场景中,经常可以遇到以下的情况:有几个地方的数据需要整合在一起。解决办法也有很多,在不同的层面有不同的解决方式。比如经过清洗可以把非关系型数据转为关系型数据。但在底层编程的情况中会发现有几情况&#…

一、数据的整合

在实际的开发场景中,经常可以遇到以下的情况:有几个地方的数据需要整合在一起。解决办法也有很多,在不同的层面有不同的解决方式。比如经过清洗可以把非关系型数据转为关系型数据。但在底层编程的情况中会发现有几情况:
1、几个数组之间的合并。
当然前提是这些数组存储的数据是兼容的
2、几个容器间的合并
它们之间的KEY和VALUE也要有兼容的数据类型
3、混合合并
可能需要做一些简单的数据处理,然后也可以合并在一起,比如数组数据,增加一个KEY(可以利用索引),就可以合并到容器中,反过来也可以考虑。

其实上面列举这么几种,本质就是把数据放到一个容器(广泛意义上的容器)中,这样方便程序的处理。比如有两个List,连接到一起一后就方便进行排序等算法的操作。

二、容器连接的基础方法

1、循环处理
这是最容易想到的方法 :

#include <iostream>
#include <unordered_map>
std::unordered_map<int, int> unmap{{1, 100}, {2, 200}};
int insertMap(std::unordered_map<int, int> &map) {if (map.size() < 1) {return 0;}for (auto &[k, v] : map) {unmap.emplace(k, v);}return unmap.size();
}int main(void) {std::unordered_map<int, int> map{{3, 300}, {4, 400}};size_t count = insertMap(map);std::cout << "new map size:" << count << std::endl;return 0;
}

2、 std::merge
它有两种合并的接口,一种是使用全局的merge;一种是使用容器自身包含的:

//map自身
#include <iostream>
#include <map>
#include <string>int main()
{std::map<int, std::string> ma{{1, "apple"}, {5, "pear"}, {10, "banana"}};std::map<int, std::string> mb{{2, "zorro"}, {4, "batman"}, {5, "X"}, {8, "alpaca"}};std::map<int, std::string> u;u.merge(ma);std::cout << "ma.size(): " << ma.size() << '\n';u.merge(mb);std::cout << "mb.size(): " << mb.size() << '\n';std::cout << "mb.at(5): " << mb.at(5) << '\n';for (auto const& kv : u)std::cout << kv.first << ", " << kv.second << '\n';
}
//全局
#include <algorithm>
#include <iterator>
#include <list>
template <typename T> void printList(const T &con, const char *c) {std::copy(con.cbegin(), con.cend(), std::ostream_iterator<typename T::value_type>(std::cout, c));std::cout << std::endl;
}
void stdMergeList() {std::list<int> l1{0, 1, 6, 3, 9, 7};std::list<int> l2{16, 11, 18, 35, 66};std::list<int> l3{};std::merge(l1.begin(), l1.end(), l2.begin(), l2.end(), std::back_inserter(l3));printList(l3, " ");
}int main(void) {stdMergeList();return 0;
}

上面的例程都比较简单,一看就明白。不过需要注意的是,有些小细节可能比较麻烦,比如在上面的使用全局处理时,如果插入到l2或l1中会是什么情况?可以试试。

另外还有一种方式就是使用C++17中的Node Handle的机制进行处理。

三、Node Handle

C++17中的Node handle(节点句柄),其实更应该说是一种机制而非方法。它主要用来处理基于结点的数据结构,常见的就是关联容器,如map,set等。它可以用Node Handle句柄来处理未指定类型的对象提取的节点。先看一个cppreference上的例子:

#include <algorithm>
#include <iostream>
#include <string_view>
#include <unordered_map>void print(std::string_view comment, const auto& data)
{std::cout << comment;for (auto [k, v] : data)std::cout << ' ' << k << '(' << v << ')';std::cout << '\n';
}int main()
{std::unordered_map<int, char> cont{{1, 'a'}, {2, 'b'}, {3, 'c'}};print("Start:", cont);// Extract node handle and change keyauto nh = cont.extract(1);nh.key() = 4;print("After extract and before insert:", cont);// Insert node handle backcont.insert(std::move(nh));print("End:", cont);
}

代码非常简单,大家一看就明白了。

四、分析

如果使用上面基础的连接方法,问题是没有什么大问题。但在实现上会有些让开发者不舒服的地方。比如循环方式插入,看似简单明了,但在底层大量进行了内存的分配和拷贝(移动),这会导致在某些情况下出现性能的瓶颈;而使用merge虽然有些进步,但并没有从本质解决,同时它还引入了一些场景的限制。比如全局的情况就只能使用有序的容器。这些细节如果再遇到复杂的应用场景如多线程等情况,一不小心可能就引入了错误。
而使用Node Handle就比较灵活方便,由于其只是Move元素,所以其效率和内存处理就简单和快捷许多。它利用了extract和insert函数,指向性非常准确和明显,即使出现异常也容易发现,非常易于维护。正如前面所分析,简单是王道!
不过使用此种机制也要小心一些重复插入的问题,文档说这种情况可能会产生UB行为。同时,仍然如前面所讲,合并的前后必须保证数据类型的一致性。最后切记切记,STL的容器一般都是非线程安全的。

五、总结

其实编程就是从这些小的功能一点点的把基础打好的。正如前面的容器中的insert,push_back和后来的emplace_back。STL库中为什么要有这么多的方法来处理元素的插入?把这些细节把握住就深刻明白了C++中容器组织的过程。从另外一个角度打开学习的途径。
人生而有涯,而学之也无涯!

http://www.yayakq.cn/news/280705/

相关文章:

  • 如何自己建立自己的网站安新建设局网站
  • 个人网站建设源代码网页设计网站链接怎么做
  • 静态网站建设的主要技术什么是wordpress程序
  • 长春网站推广优化公司软文营销的软文形式
  • 论坛网站用的虚拟主机自己做网站步骤 域名
  • 湛江模板做网站北京手机网站建设报价
  • 零基础建设网站视频北京天津网站建设哪家公司好
  • 长沙手机网站开发手机网站登陆模板
  • 网站建设推广优化公司网站的开发设计的技术
  • 如何制作视频网站公司可以备案几个网站
  • 怎么做网站app鲨鱼座 网站建设
  • 企业做网站的公司哈尔滨企业自助建站
  • 长沙网站建设服务商教育机构网站建设
  • 什么语言做网站wordpress 共享按钮
  • 在线教育网站建设方案企业管理软件有哪些品牌
  • 网站添加cnzz学校网站建设目的与意义
  • 平面设计和网站建设哪个好竞价广告点击软件
  • 建网站自己做服务器网站前台显示数据库指定分类怎么做php
  • 装修装饰网站建设软件开发工程师工作条件
  • 常州网站快速排名优化网站设计标准
  • 响应式网站无法做百度联盟东营百姓网
  • html5做网页seo电商
  • 网站开发追款单关键词优化公司排行
  • 做网站买域名怎么弄wordpress图片放大插件
  • 创办网站需要什么公共资源交易网站建设方案
  • 做网站快速赚钱游戏网站模板免费下载
  • 河南做网站哪家好安平县网站建设
  • 如何建立搜索功能的网站WordPress海报图片插件
  • 国家企业公司网站建设店铺推广方式有哪些
  • 公司网站域名及空间南阳卧龙区网站建设哪家好