与 std::pairs 初始化混淆
Confusion with std::pairs initialization
下面的代码在编译时会产生以下错误:
error C2439: 'std::pair::first' : member could not be initialized
error C2440: 'initializing' : cannot convert from 'int' to 'const AnalyticsToolKit::ParcelPassingLogic::ParticipantNode &'
然而,当我注释掉底线时,没有这样的错误,所以这对从散列传回的方式肯定有问题table?
P.S。我也是用的Qt包,QHash和unordered_map基本一样,QStrings和std::string一样,但是可以作为hash key
任何帮助将不胜感激!!
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];
我对 QT 一无所知,但如果 QHash
类似于 unordered_map
,那么问题出在您使用 operator[]
的地方。如果给定键不存在,该函数将为给定键插入一个默认构造的值。为此,值类型必须是默认可构造的,并且:
std::pair<const ParticipantNode&, double>
不可默认构造,因为 const ParticipantNode&
不可默认构造。
您将不得不使用 find()
或与之等效的 QT:
auto it = sellersSoldToParticipants.find(buyParticipant);
if (it != sellersSoldToParticipants.end()) {
std::pair<const ParticipantNode&, double> tradeDetails = it->second;
}
下面的代码在编译时会产生以下错误:
error C2439: 'std::pair::first' : member could not be initialized
error C2440: 'initializing' : cannot convert from 'int' to 'const AnalyticsToolKit::ParcelPassingLogic::ParticipantNode &'
然而,当我注释掉底线时,没有这样的错误,所以这对从散列传回的方式肯定有问题table?
P.S。我也是用的Qt包,QHash和unordered_map基本一样,QStrings和std::string一样,但是可以作为hash key
任何帮助将不胜感激!!
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];
我对 QT 一无所知,但如果 QHash
类似于 unordered_map
,那么问题出在您使用 operator[]
的地方。如果给定键不存在,该函数将为给定键插入一个默认构造的值。为此,值类型必须是默认可构造的,并且:
std::pair<const ParticipantNode&, double>
不可默认构造,因为 const ParticipantNode&
不可默认构造。
您将不得不使用 find()
或与之等效的 QT:
auto it = sellersSoldToParticipants.find(buyParticipant);
if (it != sellersSoldToParticipants.end()) {
std::pair<const ParticipantNode&, double> tradeDetails = it->second;
}