Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >表示包含交叉引用的数据结构的STL方法

表示包含交叉引用的数据结构的STL方法
EN

Stack Overflow用户
提问于 2016-05-13 10:44:18
回答 3查看 295关注 0票数 4

我经常面对以下情况。(在不失去通用性的情况下:我在下面的示例中使用了两个容器的最简单的情况,但在几何算法的实现中,需要大量的几何算法来描述相互关联的图形数据结构。)

我有两个数据类型( AB )的大量值,它们相互引用(一般不是一对一),例如,首先通过(本机)指针或引用。它们都被放置在容器using CA = std::container1< A >;using CB = std::container2< B >;中。某些函数的结果是一对CACB实例。有一个CA实例元素,我希望删除CB实例中的引用元素,反之亦然。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct A;
struct B;

using CA = std::container1< A >;
using CB = std::container2< B >;

我想将AB定义为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct A
{
    int payload;
    typename CB::iterator pb; // hard error here in general case of choosing `std:container2`
};

struct B
{
    double payload;
    typename CA::iterator pa;
};

// ...
PA a;
PB b;
// ...
assert(!a.empty());
assert(a.begin()->pb != b.end()); // and pb is not default-constructed
b.erase(a.begin()->pb);

活的例子。

但是目前我无法在一般情况下声明typename CB::iterator pb;,只有B /*const*/ * pb;B /*const*/ & pb;,因为作为CB声明的一部分的B类型在使用容器CB的成员typedef iterator定义聚合A时是不完整的。

有一个不完整类型的容器的建议,但它目前并不是标准的一部分。

对于当前在libstdc++和libc++中实现非调试版本的容器,上面的代码可能会很好地编译,但这一点也不是强制性的。在成功的情况下,迭代器的定义不包含任何内容,只包含指针或对value_type的引用。但在标准中没有这方面的要求。

正如您在实例化中看到的,std::unordered_set存在严重错误,因为它的迭代器要求std::hash of value_type必须是完整类型。

由于体系结构(OOP)和性能方面的原因,双重间接提出的注释可能不是很好的解决方案。至少,定义std::container3< B * >std::container2< B >以及跟踪不同交叉参照容器的动物园的有效性看起来很难看。

迭代器本质上具有指针语义。它们不应该要求引用类型的完整性。

如何处理C++14和以前的问题?

EN

回答 3

Stack Overflow用户

发布于 2016-05-13 11:40:46

我用vectorlistdequesetunordered_set尝试了第二个例子。只有对于unordered_set,我才得到一个编译器错误,可以通过使用指针容器来修复:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 using CA = std::unordered_set< A* >;
 using CB = std::unordered_set< B* >;

这里 (Ideone.com C++14)。

票数 2
EN

Stack Overflow用户

发布于 2016-05-15 08:59:21

一个疯狂的解决方案是存储对齐存储,并手动管理迭代器的对象生存期,静态断言使存储达到合适的大小。

这是一个真正的痛苦和相当不安全(容易出错),但它的工作。

使用钻孔容器迭代器的大小/对齐方式。通过adl使用空闲函数访问迭代器。

std倾向于过度要求完全定义的类型。

仔细使用crtp和标记可能会让您自动化危险的代码,但很棘手。

票数 1
EN

Stack Overflow用户

发布于 2016-05-13 17:27:02

在您的实际示例中,基本上您拥有的是:具有1:1关系的intdouble,In存储在vector<int>中,双字节存储在unordered_set<double>中。

一种方法可能是简化问题,例如,您能够将数据放入unordered_map<double, int>中吗?有时,这可能是真的,并将解决许多努力。有时,这可能不是真的,例如,您可能需要按ints对数据进行排序。

我认为使用std 2容器的路径充满了困难,编译错误只是冰山一角,例如:

  • 对于1:1的关系,当您将一个条目添加到两个容器中时,您可能需要在插入一个容器时处理这个情况,但是另一个容器失败了。
  • 迭代器可能会失效(例如,如果您有一个到向量元素的迭代器,并且对该向量进行排序)
  • unordered_sets中的值(以及映射中的unordered_keys )是const (因此在添加它们之后不能更改它们)

另一个途径可以是:考虑使用类似boost、bimap或multi_index之类的东西。它们利用了这样一个事实:如果您希望两个基于节点的结构(例如两个集合)具有1:1的关系,那么对于insert,它只需要进行一个包含两个节点的分配。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37217251

复制
相关文章
js获取iframe中的内容(iframe内嵌页面)
在父页面中定义函数,再到子页面中调用。 父页面parent.html function getFrameId(f){ var frames = document.getElementsByTagName(“iframe”); //获取父页面所有iframe for(i=0;i
全栈程序员站长
2022/08/01
24.7K0
js获取iframe中的内容(iframe内嵌页面)
iframe跨域应用 - 使用iframe提交表单数据
之前我们提到了iframe跨域,今天我们在原有的基础之上进行“实例”的讲解。通过iframe跨域实现表单数据的提交。如果想了解iframe跨域,可以发送“iframe跨域”到“HTML5学堂”公众号。 为何提交数据还要跨域? 在使用iframe跨域之前,可能你的脑海中就出现了这样一个问题:为何提交表单数据还需要跨域呢? 首先我们要知道,网站的数据是存放在服务器上的,而当一个网站很大型,拥有很多的数据时,通常会进行分类,然后将不同类的内容放置在不同的子域名中。 表单数据的提交模式 今天会使用到MD5的知识,因
HTML5学堂
2018/03/12
5.3K0
adminLte解决iframe高度问题
adminLte默认是全局刷新,也就是不存在frame页面,经过修改,可以很容易实现右边内容框用frame实现页面刷新,这样就不需要整个页面全局刷新,点击相应菜单时,只会刷新frame窗口,但是有一个问题就是frame默认高度只有一丁点,百度之后用了自适应也会有各种问题,比如高度只能拉伸不会缩短,在解决的道路上真的是没有一个完美的解决方案,经过自己研究,发现一个非常简单的方法,那就是用js获取window的innerHeight,代码实现window.innerHeight,然后出去顶部的状态栏,以及空白部分,经过测试,窗口高度减去90是最合适的,也可以根据你自己的情况加减,最后调至一个最完美高度,发现任何分辨率都不会有问题!
全栈程序员站长
2022/09/18
9410
vue项目iframe的传值问题
  所以。我把插件的使用封装了一个html页面。vue项目则利用iframe的方式引入。
Dawnzhang
2019/11/21
1.8K0
pyppeteer对于iframe中的滑块
import asyncio import time import numpy, random import pyppeteer async def main(): ip = "xxxxxx" #代理ip port = "xxxx" #代理端口 browser = await pyppeteer.launch({'headless': False, 'args': [
小小咸鱼YwY
2020/12/21
2.8K0
【HTML】Iframe中的onload事件
当iframe.src重新指定一个url时会重新执行iframe的onload事件 <iframe id="indexFrame" name="index" width="800" onload='iFrameHeight("indexFrame");'                 frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> html生成时,会执行iframe中的onload事件 当iframe.sr
悟空聊架构
2018/05/18
3.4K0
DNS在远程调用执行中的应用
纯属蹭log4j2热度文,和安全没有直接的关系,本文只谈DNS以及日志应用; 通过dnslog.cn的截图,分析dnslog.cn的原理,基于此,介绍了可以获取更多信息的ceye的功能;在应用场景上,我们通过该原理提供了用户出口IP同本地DNS递归出口IP的对应关系,延伸出了排障场景和数据分析场景。
hermanzeng
2021/12/14
6K3
DNS在远程调用执行中的应用
深入剖析iframe跨域问题
HTML5学堂:本文当中我们介绍了跨域的基本知识,讲解到了跨域的相关种类,并讲解了解决跨域中的一种方法——如何使用iframe跨域。讲解了iframe跨域的基本原理与流程,并配以实战~ 利利的独白:跨域,是我们的课程中必不可少的一部分,但是我们一直都是在讲解JSONP的跨域方式,虽然也提到了iframe的跨域方式,但是由于时间因素,并没有办法放置到课程中。 本文仅仅讲明了iframe的跨域问题,想了解更多关于iframe标签的基本知识,直接发送 “iframe标签” 到 “HTML5学堂” 的微信。 什么是
HTML5学堂
2018/03/12
14.6K0
深入剖析iframe跨域问题
layui打开iframe窗口不刷新的问题
这个问题可能是我工作以来,最死磕不算bug的一个了,晚上熬夜到三点钟,终于找到了解决的办法。
王小婷
2019/04/29
4K0
layui打开iframe窗口不刷新的问题
网页嵌入Iframe中
<iframe id="reportFrame" width="900" height="400" src="https://www.baidu.com/"></iframe> 如果把第三方网页嵌到iframe中,下面以百度为例 Refused to display 'https://www.baidu.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'. 开发时通过配置代理 <iframe id="reportFra
tianyawhl
2022/08/07
1.8K0
深度学习在环境远程遥感中的应用
本文是关于深度学习在环境远程遥感方面的应用研究进展及面临的挑战。简要介绍由武汉大学张良培教授团队的这篇综述文章。
bugsuse
2020/04/21
1K0
深度学习在环境远程遥感中的应用
JavaScript 处理Iframe自适应高度的问题
 用到的就是iframe嵌套的页面加载完毕的时候,运用onload事件来获取嵌套在iframe中网页的高度,然后赋值给Iframe的高度即可。
aehyok
2018/09/11
1.6K0
iframe编程的一些问题
前几天做一个用iframe显示曲线图的demo,发现对iframe的contentDocument绑定 onclick事件都无效,而在页面中对iframe.contentDocument的onclick 属性为undefined;而当iframe去掉src属性后,在对其绑定onclick事件,该事件生效; 对比之下才发现原来当对iframe.contentDocument绑定事件时,iframe还没有加载 完毕,此时对于contentDocument虽然可以绑定该事件处理函数,但是却无法执行, 因为此时co
欲休
2018/03/15
9610
【JS应用】Iframe 解决跨域
跨域的东西, 简直不要接触太多,网上相关内容一抓一大把,但是突然学习到一个关于前端解决跨域的方式
神仙朱
2019/11/07
15.5K0
【JS应用】Iframe 解决跨域
如何在 WordPress 中嵌入 iFrame
Iframe 是一种将网页嵌入到另一个页面的内容中的方法。这是通过使用 HTML 元素、外部网站的 URL 以及窗口在您的网站上的外观参数来实现的。
海拥
2022/12/11
2.4K0
如何在 WordPress 中嵌入 iFrame
jQuery控制iframe中对象的方法
jQuery中的$()方法很容易获取到DOM中的元素。但是这个方法不适用于引用iframe中的元素。 如下面的html a.htm
EltonZheng
2021/01/26
2.1K0
IE中iframe跨域访问
本文主要讲述了IE浏览器中iframe跨域访问的问题以及如何解决。主要包括三个方面:1.什么是跨域,以及跨域引发的问题;2.如何解决跨域问题,分别从浏览器和服务器两个方面给出方案;3.浏览器和服务器在解决跨域问题的过程中需要注意的一些细节。
高爽
2017/12/28
4.3K0
IE中iframe跨域访问
JavaScript中给 iframe 中的元素添加点击事件
最近在开发一个浏览器插件,需要抓取掌中云平台的数据,由于该平台的页面结构是采用iframe嵌套的方式加载的, 所以在添加事件的时候遇到了一点小麻烦,现特此将解决方法记录如下,以供大家复制粘贴。
越陌度阡
2022/11/27
3.6K0
点击加载更多

相似问题

.Net城域应用中的MarkUpExtension

10

未触发BackgroundTask的城域应用程序问题

12

城域WinRT应用中的AesManaged解密

20

WindowsBase组件结构在城域应用中的应用

13

分组CollectionViewSource在windows 8城域应用中的应用

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文