28 #ifndef YB_INC_YSTDEX_CONTAINER_HPP_
29 #define YB_INC_YSTDEX_CONTAINER_HPP_ 1
44 template<
class _tContainer,
typename... _tParams>
46 assign(_tContainer& con, _tParams&&... args)
50 template<
class _tContainer,
typename _type,
size_t _vN>
52 assign(_tContainer& con,
const _type(&arr)[_vN])
54 con.assign(arr, arr + _vN);
65 template<
class _tContainer,
typename _tKey>
67 at(_tContainer& con,
const _tKey& k)
68 -> decltype(con.at(k))
72 template<
class _tContainer,
typename _tKey>
74 at(
const _tContainer& con,
const _tKey& k)
76 const auto i(con.find(k));
80 throw std::out_of_range(
"ystdex::at");
90 template<
typename _tContainer>
104 template<
typename... _tParams>
107 -> decltype(
container->insert(std::forward<_tParams>(args)...))
120 template<
typename _tContainer,
typename... _tParams>
134 template<
typename _tContainer>
136 erase_all(_tContainer& c,
const typename _tContainer::value_type& val)
138 c.erase(std::remove(
begin(c),
end(c), val),
end(c));
146 template<
typename _tContainer,
typename _tIn,
typename _tValue>
163 template<
typename _tRange,
typename _fPredicate>
167 c.erase(std::remove_if(
begin(c),
end(c), pred),
end(c));
175 template<
typename _tContainer,
typename _tIn,
typename _fPredicate>
195 template<
class _tMap>
196 std::pair<typename _tMap::iterator, bool>
199 const auto i(m.lower_bound(k));
201 return std::make_pair(i, (i == m.end() || m.key_comp()(k, i->first)));
209 template<
typename _type,
typename... _tParams>
210 inline std::array<_type,
sizeof...(_tParams)>
222 template<
typename _type,
size_t _vN,
typename _tSrc>
226 return std::array<_type, _vN>(src);
228 template<
typename _type,
size_t _vN>
234 template<
typename _type,
size_t _vN,
typename _tSrcElement>
235 inline std::array<_type, _vN>
238 std::array<_type, _vN> arr;
240 std::copy_n(std::addressof(src[0]), _vN, std::addressof(arr[0]));
241 return std::move(arr);
243 template<
typename _type,
size_t _vN,
typename _tSrcElement>
244 inline std::array<_type, _vN>
247 std::array<_type, _vN> arr;
249 std::copy_n(std::make_move_iterator(std::addressof(src[0])), _vN,
250 std::addressof(arr[0]));
251 return std::move(arr);