C++ 与std::pairs初始化混淆

C++ 与std::pairs初始化混淆,c++,qt,hash,unordered-map,std-pair,C++,Qt,Hash,Unordered Map,Std Pair,下面的代码在编译时会产生以下错误: 错误C2439:'std::pair::first':无法初始化成员 错误C2440:“正在初始化”:无法从“int”转换为“const analyticstolkit::ParcelPassingLogic::ParticipantNode&” 然而,当我注释掉底线时,没有这样的错误,所以从哈希表传回对的方式一定有问题 另外,我也在使用Qt包,QHash基本上与无序_映射相同,qstring类似于std::string,但它们可以用作哈希键 任何帮助都将不胜

下面的代码在编译时会产生以下错误:

错误C2439:'std::pair::first':无法初始化成员

错误C2440:“正在初始化”:无法从“int”转换为“const analyticstolkit::ParcelPassingLogic::ParticipantNode&”

然而,当我注释掉底线时,没有这样的错误,所以从哈希表传回对的方式一定有问题

另外,我也在使用Qt包,QHash基本上与无序_映射相同,qstring类似于std::string,但它们可以用作哈希键

任何帮助都将不胜感激

struct ParticipantNode
{
    QHash<const QString, std::pair<const ParticipantNode&, double> > soldToParticipants;
};

QHash<QString, QHash<QString, ParticipantNode> > mGraphs;


QString buyer = "someString";
QString seller = "someString";
QString security = "someString";
double value = someDouble;

QHash<QString, ParticipantNode>& tradeGraph = mGraphs[security];
ParticipantNode& sellerNode = tradeGraph[seller];
QHash<const QString, std::pair<const ParticipantNode&, double> > sellersSoldToParticipants = sellerNode.soldToParticipants;

std::pair<const ParticipantNode&, double> tradeDetails = sellersSoldToParticipants[buyParticipant];
struct ParticipantNode
{
QHash解决方案参与者;
};
QHash-mGraphs;
QString buyer=“someString”;
QString seller=“someString”;
QString security=“someString”;
double value=someDouble;
QHash&tradeGraph=mGraphs[security];
ParticipantNode&sellerNode=tradeGraph[seller];
QHash sellersSoldToParticipants=sellerNode.soldToParticipants;
std::pair tradeDetails=sellersSoldToParticipants[buyParticipant];

我对QT一无所知,但是如果
QHash
类似于
无序映射
,那么问题是您在哪里使用
操作符[]
。如果给定键不存在,该函数将为该键插入默认构造值。为此,值类型必须是默认可构造的,并且:

std::pair<const ParticipantNode&, double>

什么是
sellParticipantNode
,它来自哪里?你能生成一个吗?对不起,我打断了它,它应该是“sellerNode”,谢谢你的回答:)常量和/或“&”是否禁止它默认可构造?@AshleyPhillips reference。
auto it = sellersSoldToParticipants.find(buyParticipant);
if (it != sellersSoldToParticipants.end()) {
    std::pair<const ParticipantNode&, double> tradeDetails = it->second;
}