http://www.okjsp.net/seq/258932
사과 => 10
사과 => 15
사과 => 23
배 => 12
배 => 35
배=> 26
이런 식일 때, (key값이 중복됩니다.)
바꾸고 싶은건
사과 =>48 (10+15+23)
=>답1
Map 키값을 중복으로 넣을수 있나요?
=>1.내 답
map으로 했다가 말씀하신 key값 중복 때문에 multimap으로 변경했다가
value의 자료형을 vector로 주면 된다고 하길래 map으로 다시 선언했습니다..
음..key값이 중복될 때 value의 값을 더하고자 하는 것인데요...
이렇게 할 수 없는건가요?
=>답2
push_back 할 자료형이 vector 라야지요. 과일별로 개별 값도 보관해야 하고 합산된 값도 필요한 거라면 다른 자료형을 사용해야 할 것 같네요. 단순히 과일별 합산 값만 필요한 경우면 map<string, float> 로 쓰면 될 거고요..
=>2.내 답
그럼 else부분에서 이미 입력된 matchRate을 어떻게 받아 올 수 있나요??
=>답2-1
find 에서 찾은 iterator 를 사용하면 되죠..
=>답3
map < string , vector<float>> values;
map["사과"].push_back(10);
map["사과"].push_back(15);
map["사과"].push_back(23);
map["배"].push_back(12);
map["배"].push_back(35);
map["배"].push_back(26);
최종 합을 출력할 때,
float sum;
for(auto itr = map["배"].begin(); itr != map["배"].end(); ++itr) {
sum+= *itr;
}
cout << (boost::format("합: %f\n") % sum).str();
코드는 실제 테스트는 안 해봤지만 대강 이런 식입니다. C++ 표준 2011 이하라면 auto 부분을 해당 const_iterator로 수정해서 구현하시길.. 지나 가다 옛날 생각나서 적고 갑니다.
======
아참 변수명을 values로 했는데 map에다 넣는 식으로 적었으니 values["사과"].push_back(10); 이런 식으로 적으시길..
======
그리고 본 질문에서 find("키")를 수행해서 해당 키가 존재하면 iterator에 해당 개체가 담기므로 이런식으로 구현하셔야 합니다.
auto itr = values.find("사과");
if(values.end() == itr) {
사과가 존재하지 않는 경우의 코드
} else {
사과가 존재하는 경우 위의 코드 예에서와 같이 sum을 구해서 출력합니다.
}
'나의질문답' 카테고리의 다른 글
map의 데이터에 대해 궁금합니다. (0) | 2014.08.26 |
---|---|
map의 value가져오기 (0) | 2014.08.20 |
map의 value를 수정하고 싶습니다. (0) | 2014.08.20 |
equal_range 를 사용하여 key가 같은 value의 평균을 구하고 싶습니다. (0) | 2014.08.19 |
multimap의 value평균구하기 질문있습니다 (0) | 2014.08.18 |