[STL] Cách sắp xếp một vector trong C++
Việc sắp xếp dữ liệu là một trong những thao tác cơ bản và quan trọng. Với việc sử dụng STL (Standard Template Library), việc sắp xếp các phần tử trong một vector trở nên đơn giản và hiệu quả hơn bao giờ hết. Trong bài viết này, mình sẽ tìm hiểu về cách sắp xếp một vector trong C++ bằng cách sử dụng các công cụ và thuật toán có sẵn trong STL.
Chúng ta sẽ bắt đầu bằng cách giới thiệu về vector trong STL và vai trò của nó trong việc lưu trữ dữ liệu. Sau đó, sẽ đi sâu vào các phương pháp sắp xếp vector, bao gồm sắp xếp tăng dần, sắp xếp giảm dần và cách sắp xếp sử dụng hàm so sánh tùy chỉnh. Cuối cùng, mình sẽ xem xét một số ví dụ minh họa để hiểu rõ hơn cách sử dụng các phương pháp này trong thực tế.
Vector trong STL của C++
Vector là một trong những cấu trúc dữ liệu phổ biến nhất trong STL (Standard Template Library) của C++. Nó là một loại mảng động có kích thước linh hoạt, cho phép thêm, xóa và truy cập các phần tử một cách dễ dàng.
Khi khai báo một vector, bạn không cần phải chỉ định kích thước ban đầu của nó. Vector tự động mở rộng khi cần thiết để chứa thêm phần tử mới. Điều này làm cho việc sử dụng vector trở nên linh hoạt và thuận tiện trong việc lưu trữ dữ liệu.
Bài viết này được đăng tại [free tuts .net]
Ví dụ:
#include <iostream> #include <vector> int main() { // Khai báo và khởi tạo vector rỗng std::vector<int> myVector; // Thêm các phần tử vào vector myVector.push_back(10); myVector.push_back(20); myVector.push_back(30); //Bài được đăng tại freetuts.net // Truy cập và hiển thị các phần tử trong vector std::cout << "Vector: "; for (int i = 0; i < myVector.size(); ++i) { std::cout << myVector[i] << " "; } std::cout << std::endl; return 0; }
Kết quả:
Trong ví dụ trên, mình đã khai báo và khởi tạo một vector rỗng ban đầu. Sau đó, đã thêm các phần tử vào vector bằng phương thức push_back()
và truy cập các phần tử trong vector bằng cách sử dụng chỉ số. Vector tự động mở rộng kích thước của mình để chứa các phần tử mới khi cần thiết.
Cách sắp xếp một vector trong C++
Sắp xếp tăng dần
Để sắp xếp một vector theo thứ tự tăng dần, mình có thể sử dụng hàm std::sort()
trong STL. Hàm này sẽ sắp xếp các phần tử của vector theo thứ tự tăng dần.
Hàm std::sort() trong STL:
- Hàm
std::sort()
được sử dụng để sắp xếp các phần tử trong một range thành thứ tự tăng dần. - Hàm này có thể được sử dụng với các kiểu dữ liệu cơ bản và cũng với các kiểu dữ liệu do người dùng định nghĩa.
Ví dụ minh họa:
#include <iostream> #include <vector> #include <algorithm> int main() { // Khai báo và khởi tạo vector std::vector<int> myVector = {5, 2, 8, 1, 9}; // Sắp xếp vector theo thứ tự tăng dần std::sort(myVector.begin(), myVector.end()); //Bài được đăng tại freetuts.net // Hiển thị vector sau khi đã sắp xếp std::cout << "Vector sau khi sap xep tang dan: "; for (int num : myVector) { std::cout << num << " "; } std::cout << std::endl; return 0; }
Kết quả:
Trong ví dụ này, mình khai báo và khởi tạo một vector với các giá trị ban đầu. Sau đó, chúng ta sử dụng hàm std::sort()
để sắp xếp vector này thành thứ tự tăng dần. Cuối cùng, hiển thị vector sau khi đã sắp xếp.
Sắp xếp giảm dần
Để sắp xếp một vector theo thứ tự giảm dần, chúng ta có thể sử dụng hàm so sánh ngược std::greater<>()
trong STL. Hàm này sẽ sắp xếp các phần tử của vector theo thứ tự giảm dần.
Hàm std::greater<>() trong STL:
- Hàm
std::greater<>()
được sử dụng để so sánh hai phần tử và trả về true nếu phần tử đầu tiên lớn hơn phần tử thứ hai, ngược lại trả về false.
Ví dụ minh họa:
#include <iostream> #include <vector> #include <algorithm> int main() { // Khai báo và khởi tạo vector std::vector<int> myVector = {5, 2, 8, 1, 9}; // Sắp xếp vector theo thứ tự giảm dần std::sort(myVector.begin(), myVector.end(), std::greater<int>()); //Bài được đăng tại freetuts.net // Hiển thị vector sau khi đã sắp xếp std::cout << "Vector sau khi sap xep giam dan: "; for (int num : myVector) { std::cout << num << " "; } std::cout << std::endl; return 0; }
Kết quả:
Trong ví dụ này, mình khai báo và khởi tạo một vector với các giá trị ban đầu. Sau đó, mình sử dụng hàm std::sort()
với hàm so sánh ngược std::greater<>()
để sắp xếp vector này thành thứ tự giảm dần. Cuối cùng, mình hiển thị vector sau khi đã sắp xếp.
Sắp xếp sử dụng hàm so sánh tùy chỉnh
Để sắp xếp một vector theo một tiêu chí nhất định, mình có thể sử dụng hàm so sánh tùy chỉnh. Điều này cho phép sắp xếp vector dựa trên một thuộc tính cụ thể hoặc một tiêu chí phức tạp khác.
Cách sử dụng hàm so sánh tùy chỉnh:
- Mình có thể sử dụng hàm so sánh tùy chỉnh bằng cách truyền một hàm so sánh hoặc một hàm so sánh
lambda
như một tham số cho hàmstd::sort().
Ví dụ minh họa:
#include <iostream> #include <vector> #include <algorithm> //Bài được đăng tại freetuts.net // Hàm so sánh tùy chỉnh để sắp xếp vector theo giá trị tuyệt đối bool customCompare(int a, int b) { return std::abs(a) < std::abs(b); } int main() { // Khai báo và khởi tạo vector std::vector<int> myVector = {5, -2, 8, -1, 9}; // Sắp xếp vector theo giá trị tuyệt đối std::sort(myVector.begin(), myVector.end(), customCompare); // Hiển thị vector sau khi đã sắp xếp std::cout << "Vector sau khi sap xep theo gia tri tuyet doi: "; for (int num : myVector) { std::cout << num << " "; } std::cout << std::endl; return 0; }
Kết quả:
Trong ví dụ này, mình sử dụng một hàm so sánh tùy chỉnh customCompare()
để sắp xếp vector theo giá trị tuyệt đối của các phần tử.
Kết bài
Trong khi viết ứng dụng C++, việc sắp xếp dữ liệu là một yếu tố quan trọng để tối ưu hóa hiệu suất và tăng tính linh hoạt của chương trình. Qua bài viết này, chúng ta đã hiểu rõ về cách sử dụng STL để sắp xếp một vector trong C++. Từ việc khai báo và sử dụng các phương thức cơ bản cho đến việc áp dụng các thuật toán sắp xếp và tìm kiếm, chúng ta đã nhận thấy tính tiện lợi và mạnh mẽ của STL trong việc xử lý dữ liệu. Hy vọng rằng thông qua bài viết này, bạn sẽ có được kiến thức và kỹ năng cần thiết để hiệu quả sử dụng vector và sắp xếp dữ liệu trong các ứng dụng C++ của mình.