为什么第二个元素在地图中打印?

时间:2017-03-24 03:30:33

标签: c++

在下面的代码中,为什么在使用begin()时返回元素2而不是元素1?有人可以解释一下吗?

SELECT customer.customer_id AS Jancust_id, 
SUM( payments.payment ) AS Jan_cust_pmts, 
COUNT( DISTINCT customer.customer_id ) AS Jan_orig_cust,
AVG(payments.payment) as CustLifeRev
FROM telemon_payments_data payments
LEFT JOIN telemon_customer_data customer 
ON payments.customer_id = customer.customer_id
WHERE DATE_FORMAT( customer.account_created_on,  '%Y-%m' ) =  '2016-01'
GROUP BY Jancust_id

在输出中我得到了

第一个元素是:查理第二个元素是2

2 个答案:

答案 0 :(得分:5)

当您向map添加项目时,它们会自动按键排序。这意味着地图按键的字母顺序存储您的项目。在这种情况下,Charlie获得第一位,然后是David,最后是Robert

如果您更改Charlie的{​​{1}},则会先存储John。我不完全确定你打算用这个做什么,但看起来你的数字应该是你的钥匙

答案 1 :(得分:1)

std::map是一个已排序的容器。得到排序的值是std::pair< std::string, int >类型。所以第一项是{"Charlie", 2}对。恰好pair的成员名为firstsecond

所以std::pair< std::string, int >{"Charlie", 2}.first"Charlie",和  std::pair< std::string, int >{"Charlie", 2}.second2

firstsecond不是指map的排序顺序。