classSolution { public: intkthSmallest(vector<vector<int>>& matrix, int k){ priority_queue<Ele, vector<Ele>, less<Ele>> pq; int m = matrix.size(), n = matrix[0].size(); for(int i = 0; i < m; ++i) pq.push(Ele(matrix[i][0], i, 0)); for(int i = 0; i < k - 1; ++i) { auto p = pq.top(); pq.pop(); if(p.y == n - 1) continue; pq.push(Ele(matrix[p.x][p.y + 1], p.x, p.y + 1)); } return pq.top().val; } private: structEle { int val; int x; int y; Ele(int val, int x, int y) : val(val), x(x), y(y) {} booloperator < (const Ele& ele) const { returnthis->val > ele.val; } }; };