operator<
ищется через ADL. Нельзя определить оператор для чужих типов, и чтобы его подхватили алгоритмы. Предлагаю такое решение: вместо char искать свою структуру (её можно определить просто как struct с char), для которой определить сравнение так же, как ты это сделал с char. std::any
позволяет сохранить в себя объект любого типа, после чего через any_cast
вытащить значение, если оно такого типа, как мы предполагаем. Проверка осуществляется через RTTI. Если поддерживается много конкретных типов, вы должны писать здоровенную цепочку if-else-if. В таком случае лучше уж идти через наследование. namespace what {
#define apples 2
}
namespace stuff {
class foo {
private:
int apples = 3; // ОШИБКА: 2 - недопустимое имя
public:
int read_apples() {
return apples; // 2
}
};
}
constexpr
константами или inline
функциями. А там, где они необходимы, давайте им длинные страшные КРИЧАЩИЕ_ИМЕНА. std::vector<std::vector<std::string>>
. Каждый внутренний вектор хранит варианты выбора для очередного куска строки. В частности, для кусков строки между вариативными частями будем считать, что есть всего 1 вариант выбора. Соответственно, весь вектор векторов — это последовательность таких вариативных частей. Задача делится на 2 части:std::string
для текущего варианта и std::vector<std::string>
для текущей вариативной части.std::string
, и накидываем туда из каждого внутреннего вектора по 1 варианту. Cls::Cls(char c, double d, int i)
: c(c), d(d), i(i) {}
std::string
использует SBO, то есть не выделяет доп. память в куче для коротких строк. Ещё стандартные мапы в C++ крайне неэффективны, подключите библиотеку. Идея такова:IdentifyLength,
а не на typedef
. К слову, в новом коде вместо typedef
следует использовать using
:using DigitArea = unsigned int;
<cstdint>
по умолчанию. Например:using DigitArea = std::int64_t;
#include "std_lib_facilities.h"
std_lib_facilities.h
и подключили его должным образом? template <typename T>
class hashed {
T value_;
size_t hash_;
friend class std::hash<hashed<T>>;
public:
template <typename... Args>
constexpr hashed(Args&&... args) :
value_(std::forward<Args>(args)...),
hash_(std::hash<T>()(value_))
{}
// rule of zero
constexpr T& get() & noexcept { return value_; }
constexpr const T& get() const& noexcept { return value_; }
constexpr T&& get() && noexcept { return value_; }
constexpr const T&& get() const&& noexcept { return value_; }
};
namespace std {
template <typename T>
struct hash<hashed<T>> {
constexpr size_t operator()(const hashed<T>& x) const noexcept {
return x.hash_;
}
};
}
std::unordered_map<hashed<std::string>, int> cache;
auto it = cache.find("property1"); // хеш на этапе выполнения
// хеш на этапе компиляции, работает с constexpr std::string из C++20
constexpr auto h = hashed<std::string>("property1");
auto it2 = cache.find(h); // предрасчитанный хеш
# lang: Python 3.5
import numpy as np
from sklearn.cluster import KMeans
cl = KMeans(n_clusters=5)
labels = cl.fit_predict(np.array([[600], [1000], [4500], [5000], [6500], [7000], [7500], [10000]))
#=> [0 0 3 3 1 1 4 2]
Bool?
понадобился?var per2 = false
.func aaa() throws {
let fetchResult = try PersistenceService.contex.fetch(fetchRequest)
for item in fetchResult {
let per = item.password
guard let pass = per else {
throw AaaErrors.passwordNotCreated
}
print("пароль \(pass!)")
}
}