2013-03-21 63 views
5

Tôi cố gắng để sử dụng một hash_map, được định nghĩa trong Android NDK, nhưng tôi nhận được một "cảnh báo không dùng nữa":Cách sử dụng unordered_map trong Android?

ndk/sources/cxx-stl/gnu-libstdc++/4.6/include/ext/../backward/backward_warning.h:33:2: 
error: #warning This file includes at least one deprecated or antiquated header which may 
be removed without further notice at a future date. Please use a non-deprecated interface 
with equivalent functionality instead. For a listing of replacement headers and 
interfaces, consult the file backward_warning.h. To disable this warning use -Wno- 
deprecated. [-Werror=cpp] 

Và kể từ khi "unordered_map" hiện diện trong gnu-libstdC++/4.6/include/và cũng trong gnu-libstdC++/4.6/include/tr1 /, tôi tin rằng có một cách để sử dụng nó.

Vấn đề là tôi không thể tìm thấy. Điều nào sau đây là đúng (nếu có):

#include <tr1/unordered_map.h> 

#include <unordered_map> 

Sau đó, cách sử dụng? __gnu_cxx :: unordered_map không được nhận dạng ... và tôi không biết cách tìm thông tin này.

Trả lời

2

Tôi cuối cùng đã tìm được cách bằng cách thêm hỗ trợ C++ 11 vào dự án Android của mình. Khá dễ dàng khi chúng ta biết điều đó, nhưng tôi đã dành thời gian để tìm ra. Cả STLPort lẫn Boost đều không cần thiết. Khi C++ 11 được tích hợp, tôi có thể sử dụng "unordered_map" như sau:

#include <unordered_map> 
... 
std::unordered_map<int, int> test; 

Tôi tạo ra một câu hỏi mới để giải thích làm thế nào để kích hoạt tính năng hỗ trợ C++ 11 trong Android here.

5

Trong trường hợp bạn không muốn/cần sự hỗ trợ C++ 11, bạn có thể dùng một từ STLPort sử dụng:

// Here we are referencing the stlport one: 
#include <unordered_map> 
... 
std::tr1::unordered_map<int, int> test; 

Đó là bởi vì STLPort định nghĩa unordered_map bên tr1 namespace, nhưng tiêu đề STLPort không nằm trong bất kỳ thư mục /tr1/ nào.