I have come across a scenario where I am not able to find a way to push a value in the vector
which is in the pair
. I have made a priority_queue
of pair<int, vector<string>>
and I want to push values in the vector
, for example:
priority_queue<pair<int, vector<string>> pq;
I want to know how to push elements in this priority queue.
You don't have access to the underlying container of a std::priority_queue
, so you can't access any of the std::vector
elements you store in it, other than the top()
element, eg:
priority_queue<pair<int, vector<string>> pq;
pq.push(...);
pq.emplace(...);
...
// use pq.top().second as needed...
You can iterate the strings in the vector
in the pair
returned by top()
, but you can't push_back()
more string into the vector
since the pair
will be const
, and thus the vector
will also be const
.
std::priority_queue
is probably not the best container for you to use. Maybe a std::map
would make more sense?
map<int, vector<string>> m;
m[1] = vector<string>{"I", "a"};
m[1].push_back(...);
Thank you so much for the clarification. I was able to solve the problem and here is how I approached it.
typedef pair<int, vector<string>> pi;
class Compare {
public:
bool operator() (pair<int, vector<string>> a, pair<int, vector<string>> b) {
return a.first > b.first;
}
};
class Solution {
public:
string arrangeWords(string text) {
int n = text.length();
if(n==0)
return "";
text[0] = tolower(text[0]);
unordered_map<int, vector<string>> m;
string temp = "";
for(int i = 0;i<n;i++) {
if(text[i] != ' ') {
temp += text[i];
} else {
m[temp.length()].push_back(temp);
temp = "";
}
if(i==n-1) {
m[temp.length()].push_back(temp);
}
}
priority_queue<pi, vector<pi>, Compare> pq;
for(auto x: m) {
pq.push(make_pair(x.first, x.second));
}
string res = "";
while(!pq.empty()) {
auto t = pq.top(); pq.pop();
int len = t.second.size();
for(int i=0;i<len;i++) {
res += t.second[i];
res += " ";
}
}
res[0] = toupper(res[0]);
return res.substr(0, res.length()-1);
}
};
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.