我想做這樣的事情。有沒有一個stl算法可以輕鬆做到這一點?如何將矢量中的值轉換爲C++中的地圖?
for each(auto aValue in aVector)
{
aMap[aValue] = 1;
}
我想做這樣的事情。有沒有一個stl算法可以輕鬆做到這一點?如何將矢量中的值轉換爲C++中的地圖?
for each(auto aValue in aVector)
{
aMap[aValue] = 1;
}
試試這個:
for (auto it = vector.begin(); it != vector.end(); it++) {
aMap[aLabel] = it;
//Change aLabel here if you need to
//Or you could aMap[it] = 1 depending on what you really want.
}
我認爲這是你正在嘗試做的。
編輯:如果要更新aLabel
的值,可以在循環中更改它。另外,我回頭看原始問題,目前還不清楚他想要什麼,所以我添加了另一個版本。
你是對的。我更新了這個答案。 – OGH 2013-04-09 21:38:20
也許是這樣的:
std::vector<T> v; // populate this
std::map<T, int> m;
for (auto const & x : v) { m[x] = 1; }
+1如果沒有關於這個問題的更多細節,這件事情就會變得很好。 – WhozCraig 2013-04-09 21:38:53
如果你有對,其中一對中的第一項將是地圖的主要的載體,和第二項將與該鍵關聯的值,您可以將數據直接複製到地圖插入迭代:
std::vector<std::pair<std::string, int> > values;
values.push_back(std::make_pair("Jerry", 1));
values.push_back(std::make_pair("Jim", 2));
values.push_back(std::make_pair("Bill", 3));
std::map<std::string, int> mapped_values;
std::copy(values.begin(), values.end(),
std::inserter(mapped_values, mapped_values.begin()));
,或者你可以從矢量初始化地圖:
std::map<std::string, int> m2((values.begin()), values.end());
矢量假設項目按順序有關,也許這個例子可以幫助:
#include <map>
#include <vector>
#include <string>
#include <iostream>
std::map<std::string, std::string> convert_to_map(const std::vector<std::string>& vec)
{
std::map<std::string, std::string> mp;
std::pair<std::string, std::string> par;
for(unsigned int i=0; i<vec.size(); i++)
{
if(i == 0 || i%2 == 0)
{
par.first = vec.at(i);
par.second = std::string();
if(i == (vec.size()-1))
{
mp.insert(par);
}
}
else
{
par.second = vec.at(i);
mp.insert(par);
}
}
return mp;
}
int main(int argc, char** argv)
{
std::vector<std::string> vec;
vec.push_back("customer_id");
vec.push_back("1");
vec.push_back("shop_id");
vec.push_back("2");
vec.push_back("state_id");
vec.push_back("3");
vec.push_back("city_id");
// convert vector to map
std::map<std::string, std::string> mp = convert_to_map(vec);
// print content:
for (auto it = mp.cbegin(); it != mp.cend(); ++it)
std::cout << " [" << (*it).first << ':' << (*it).second << ']';
std::cout << std::endl;
return 0;
}
如何'aLabel'相關矢量? – juanchopanza 2013-04-09 21:29:40
我認爲你需要詳細闡述一下...標籤是從哪裏來的?你真的想要一張所有值都設置爲1的地圖嗎? – dotcomslashnet 2013-04-09 21:29:59
對不起,它應該是一個值 – 2013-04-10 14:04:18